数据清洗是数据处理和分析过程中极其重要的一环。爬取的原始数据往往会包含噪声、不完整性、不一致性等问题,因此清洗和规范化数据是获得高质量数据集的必要步骤。本节将详细介绍 Pandas 库的基本使用 和 数据清洗的常用操作,结合代码实例,为开发者提供实用、可行的解决方案。
1. Pandas 库的基本使用
1.1 什么是 Pandas?
Pandas 是 Python 中用于数据分析和处理的高性能库,提供了丰富的工具来操作结构化数据和时间序列数据。Pandas 的核心数据结构是:
- Series:一维数组,类似于 Python 列表或 NumPy 数组。
- DataFrame:二维表格数据结构,类似于 Excel 表或 SQL 表。
1.2 安装 Pandas
确保 Pandas 已安装:
bash
pip install pandas
1.3 加载与保存数据
Pandas 支持多种数据格式的读取与保存,包括 CSV、Excel、JSON、SQL 等。
-
读取 CSV 文件:
pythonimport pandas as pd data = pd.read_csv('example.csv') print(data.head()) # 查看前 5 行数据
-
保存数据为 CSV 文件:
pythondata.to_csv('output.csv', index=False) # index=False 不保存行号
-
读取 Excel 文件:
pythondata = pd.read_excel('example.xlsx')
-
保存数据为 Excel 文件:
pythondata.to_excel('output.xlsx', index=False)
1.4 DataFrame 的基本操作
以下是 Pandas DataFrame 的常见操作:
-
查看数据基本信息:
pythonprint(data.info()) # 显示数据类型、缺失值等信息 print(data.describe()) # 数值列的统计信息
-
选择行和列:
python# 选择列 print(data['column_name']) # 选择多列 print(data[['col1', 'col2']]) # 选择行 print(data.iloc[0]) # 第 1 行 print(data.loc[2:5]) # 第 3 到第 6 行
-
筛选数据:
pythonfiltered_data = data[data['column_name'] > 100] # 筛选出列值大于 100 的行
-
新增或修改列:
pythondata['new_column'] = data['column_name'] * 2 # 添加一列,值为原列的 2 倍
-
删除行和列:
pythondata.drop('column_name', axis=1, inplace=True) # 删除列 data.drop([0, 1], axis=0, inplace=True) # 删除第 1 和第 2 行
2. 数据清洗的常用操作
2.1 缺失值处理
爬取的数据经常会有缺失值(NaN)。Pandas 提供多种方法处理缺失值。
-
检查缺失值:
pythonprint(data.isnull().sum()) # 每列缺失值统计
-
删除缺失值:
pythondata.dropna(inplace=True) # 删除包含缺失值的行
-
填充缺失值:
-
填充固定值:
pythondata['column_name'].fillna(0, inplace=True)
-
使用列的均值、众数填充:
pythondata['column_name'].fillna(data['column_name'].mean(), inplace=True)
-
2.2 数据类型转换
Pandas 支持数据类型的转换,例如字符串转日期、浮点数转整数等。
-
转换数据类型:
pythondata['column_name'] = data['column_name'].astype(int) # 转为整数
-
字符串转日期:
pythondata['date_column'] = pd.to_datetime(data['date_column'])
2.3 数据去重
爬取的原始数据中可能存在重复的行或字段,去重是必不可少的一步。
-
检查重复行:
pythonprint(data.duplicated().sum()) # 统计重复行数
-
删除重复行:
pythondata.drop_duplicates(inplace=True)
2.4 数据格式化
将不规范的数据进行统一,例如清除多余空格、统一大小写等。
-
清除多余空格:
pythondata['column_name'] = data['column_name'].str.strip()
-
统一大小写:
pythondata['column_name'] = data['column_name'].str.lower() # 转为小写
-
提取字符串中的特定信息: 使用正则表达式提取数据:
pythondata['extracted'] = data['column_name'].str.extract(r'(\d{4})') # 提取年份
案例:数据清洗与处理的完整流程
以下是一个对爬取的电商数据进行清洗的案例:
原始数据示例
商品名称 | 价格 | 日期 | 评价数 | 折扣 |
---|---|---|---|---|
iPhone 14 | $999 | 2024-01-01 | 1.2k | None |
Samsung Galaxy S | $899 | N/A | 900 | 10% |
OnePlus 11 | $599 | 2024-03-15 | None | 5% |
清洗步骤
python
import pandas as pd
# 1. 加载数据
data = pd.DataFrame({
'商品名称': ['iPhone 14', 'Samsung Galaxy S', 'OnePlus 11'],
'价格': ['$999', '$899', '$599'],
'日期': ['2024-01-01', 'N/A', '2024-03-15'],
'评价数': ['1.2k', '900', None],
'折扣': [None, '10%', '5%']
})
# 2. 清洗价格列(去除 $ 符号并转换为浮点数)
data['价格'] = data['价格'].str.replace('$', '').astype(float)
# 3. 处理日期缺失值
data['日期'] = pd.to_datetime(data['日期'], errors='coerce')
# 4. 转换评价数为数字
data['评价数'] = data['评价数'].str.replace('k', '000').astype(float)
# 5. 填充缺失值
data['折扣'].fillna('0%', inplace=True)
data['折扣'] = data['折扣'].str.replace('%', '').astype(float)
# 6. 检查与删除重复值(如有)
data.drop_duplicates(inplace=True)
# 7. 清洗完成,展示结果
print(data)
清洗后数据
商品名称 | 价格 | 日期 | 评价数 | 折扣 |
---|---|---|---|---|
iPhone 14 | 999.0 | 2024-01-01 | 1200.0 | 0.0 |
Samsung Galaxy S | 899.0 | NaT | 900.0 | 10.0 |
OnePlus 11 | 599.0 | 2024-03-15 | NaN | 5.0 |
总结
数据清洗与处理是数据分析的基础,Pandas 提供了强大的工具和灵活的 API,能够应对各种复杂的数据问题。通过熟练使用 Pandas 的清洗与格式化功能,开发者可以快速高效地将原始数据转化为结构化的、分析友好的数据集。