Python pandas进行数据预处理的实现
案例:电子商务客户数据的预处理
本案例将通过使用pandas库对电子商务客户数据进行数据预处理。数据预处理是进行有效数据分析的重要步骤,目的是将数据处理为适合分析的状态。本案例分为几个步骤来逐步演示如何进行数据导入、查看数据集信息、处理缺失值、数据格式转换、重复值删除、数据标准化以及数据导出。
测试数据
以下是我们将要处理的测试数据,以电子商务客户订单为例:
CustomerID | OrderDate | Product | Quantity | Price |
---|---|---|---|---|
C001 | 2024-01-10 | 智能手机 | 2 | 500.00 |
C002 | 2024-01-12 | 笔记本电脑 | 1 | 1200.00 |
C003 | NaN | 耳机 | 3 | 50.00 |
C001 | 2024-01-15 | 平板电脑 | 1 | 300.00 |
C004 | 2024-01-18 | 笔记本电脑 | 1 | 1200.00 |
C005 | 2024-01-20 | 智能手机 | 2 | NaN |
C001 | 2024-01-15 | 平板电脑 | 1 | 300.00 |
C006 | 2024-01-22 | 耳机 | 2 | 100.00 |
C007 | 2024-01-25 | 智能手表 | 1 | 200.00 |
C008 | 2024-01-28 | 平板电脑 | 3 | 900.00 |
C009 | 2024-01-30 | 笔记本电脑 | 1 | 1500.00 |
C010 | 2024-02-01 | 智能手机 | 4 | 2000.00 |
C011 | 2024-02-05 | 耳机 | 5 | 250.00 |
C012 | 2024-02-08 | 平板电脑 | 1 | 300.00 |
C013 | 2024-02-10 | 智能手表 | 2 | 400.00 |
C014 | 2024-02-12 | 笔记本电脑 | 2 | 2400.00 |
C015 | 2024-02-15 | 智能手机 | 1 | 1000.00 |
C016 | 2024-02-18 | 平板电脑 | 2 | 600.00 |
C017 | 2024-02-20 | 智能手表 | 3 | 600.00 |
C018 | 2024-02-22 | 耳机 | 1 | 50.00 |
C019 | 2024-02-25 | 智能手机 | 2 | 1200.00 |
C020 | 2024-02-28 | 笔记本电脑 | 1 | 1300.00 |
步骤1:数据导入
首先,使用pandas导入CSV文件并加载数据。
import pandas as pd # 导入CSV文件 df = pd.read_csv('ecommerce_customers.csv')
解析:首先导入pandas库,pd.read_csv()
方法用于加载CSV文件,并将其存储在名为df
的数据框中。
步骤2:查看数据集基本信息
使用pandas的各种方法来查看数据的结构和内容,以便对数据有初步的了解。
# 查看数据的前几行 print(df.head()) # 查看数据类型和列信息 print(df.info()) # 数值列的简单统计分析 print(df.describe())
解析:
df.head()
:查看数据的前几行,帮助快速了解数据的基本结构。
运行结果:
CustomerID OrderDate Product Quantity Price
0 C001 2024-01-10 智能手机 2 500.0
1 C002 2024-01-12 笔记本电脑 1 1200.0
2 C003 NaN 耳机 3 50.0
3 C001 2024-01-15 平板电脑 1 300.0
4 C004 2024-01-18 笔记本电脑 1 1200.0
通过head()
方法,我们可以快速查看数据的前5行,了解数据的大致内容。
df.info()
:显示数据集的列、非空值数量和数据类型,帮助了解数据集的整体情况。
运行结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CustomerID 20 non-null object
1 OrderDate 19 non-null object
2 Product 20 non-null object
3 Quantity 20 non-null int64
4 Price 19 non-null float64
dtypes: float64(1), int64(1), object(3)
memory usage: 928.0+ bytes
通过info()
方法,我们可以看到数据集中每一列的名称、数据类型,以及非空值的数量,这对于后续判断是否有缺失值非常有帮助。
df.describe()
:对数值列进行统计分析,提供如均值、标准差等信息。
运行结果:
Quantity Price
count 20.000000 19.000000
mean 2.000000 810.526316
std 1.055597 714.053229
min 1.000000 50.000000
25% 1.000000 300.000000
50% 2.000000 1000.000000
75% 3.000000 1200.000000
max 5.000000 2400.000000
通过describe()
方法,我们可以看到数值列(如Quantity
和Price
)的统计信息,如均值、中位数、标准差等,这对于数据的分布和特征分析非常重要。
`count` 表示数据集中非空值的数量。对于 `Quantity` 列,所有 20 个值都是非空的;而对于 `Price` 列,只有 19 个非空值,说明有一个缺失值。
`mean` 表示列的平均值。`Quantity` 列的平均购买量是 2;`Price` 列的平均价格是 810.53。步骤3:处理缺失值。
`min` 表示列中的最小值。`Quantity` 列的最小购买量是 1;`Price` 列的最低价格是 50。
`25%` 表示第一四分位数,即 25% 的数据点小于或等于这个值。对于 `Quantity` 列,第一四分位数是 1;对于 `Price` 列,这个值是 300。
`50%` 表示中位数,即 50% 的数据点小于或等于这个值。`Quantity` 列的中位数为 2;`Price` 列的中位数为 1000。
`75%` 表示第三四分位数,即 75% 的数据点小于或等于这个值。`Quantity` 列的第三四分位数是 3;`Price` 列的第三四分位数是 1200。
`max` 表示列中的最大值。`Quantity` 列的最大购买量是 5;`Price` 列的最高价格是 2400。
处理数据中的缺失值。在本案例中,OrderDate
和Price
列中存在缺失值。
# 查看缺失值 def missing_values(df): return df.isnull().sum() print(missing_values(df)) # 填充缺失的价格列,以平均值替代 df['Price'].fillna(df['Price'].mean(), inplace=True) # 填充缺失的订单日期,以特定日期替代 df['OrderDate'].fillna('2024-01-01', inplace=True)
解析:
df.isnull().sum()
:统计每一列的缺失值数量,帮助识别数据中的空缺项。df['Price'].fillna(df['Price'].mean(), inplace=True)
:使用均值填充Price
列的缺失值,确保数据的完整性。inplace=True 是一个参数,用于指定操作是否在原数据框上进行修改。设置 inplace=True 后,操作会直接对原数据框进行更改,而不会返回一个新的数据框。这有助于节省内存,但需要谨慎使用,因为数据的修改是不可逆的。df['OrderDate'].fillna('2024-01-01', inplace=True)
:将OrderDate
列的缺失值填充为默认日期2024-01-01
。
步骤4:数据格式转换
将OrderDate
列从字符串转换为日期类型,以便后续进行时间序列分析。
# 将OrderDate转换为日期类型 df['OrderDate'] = pd.to_datetime(df['OrderDate'])
解析:pd.to_datetime(df['OrderDate'])
将OrderDate
列转换为日期时间格式,这样可以方便后续的日期相关分析,例如排序或时间序列分析。
步骤5:处理重复值
查找并删除数据集中的重复值,以保证数据的准确性。
# 查找重复的行 duplicates = df[df.duplicated()] print(duplicates) # 删除重复的行 df.drop_duplicates(inplace=True)
解析:
df.duplicated()
:标记数据集中重复的行。df.drop_duplicates(inplace=True)
:删除所有重复的行,确保数据集不包含重复记录,从而提高分析结果的准确性。
步骤6:数据标准化
对Price
列进行标准化,以便后续的分析和建模。
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['Price'] = scaler.fit_transform(df[['Price']])
解析:
- 导入
MinMaxScaler
用于对数据进行缩放。 scaler.fit_transform(df[['Price']])
将Price
列的值缩放到0到1之间,标准化后的数据更适合用于机器学习模型。
步骤7:保存预处理后的数据
最后,将预处理后的数据保存为一个新的CSV文件,以供后续分析使用。
# 导出为新文件 df.to_csv('ecommerce_customers_cleaned.csv', index=False)
解析:df.to_csv()
方法将处理过的数据保存为新的CSV文件,index=False
表示不保存索引列。
总结
通过上述步骤,我们已经对电子商务客户数据集进行了数据预处理,涵盖了数据的导入、查看、缺失值处理、数据格式转换、重复值删除、数据标准化以及数据导出。通过这个案例,学生可以理解数据预处理的关键步骤和技巧,为后续的数据分析和建模做好准备。
到此这篇关于Python pandas进行数据预处理的实现的文章就介绍到这了,更多相关pandas数据预处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
这篇文章主要介绍了Pycharm2020.1安装中文语言插件的详细教程,不需要汉化,本文给大家分享三种方法,在这小编推荐使用方法二,具体内容详情大家跟随小编一起看看吧2020-08-08Python使用progressbar模块实现的显示进度条功能
这篇文章主要介绍了Python使用progressbar模块实现的显示进度条功能,简单介绍了progressbar模块的安装,并结合实例形式分析了Python使用progressbar模块显示进度条的相关操作技巧,需要的朋友可以参考下2018-05-05配置jupyter notebook全步骤,更改默认路径,jupyter不是问题
这篇文章主要介绍了配置jupyter notebook全步骤,更改默认路径,jupyter不是问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
最新评论