9.5 缺失值处理实战案例
Pandas缺失值处理实战案例 - 中文学习手册
本章节详细介绍了Pandas中缺失值处理的三个实战案例,包括不同缺失比例列的策略、按分组填充销量缺失值和插值法处理时间序列数据,帮助初学者掌握数据清洗技巧。
推荐工具
缺失值处理实战案例
引言
在处理数据时,缺失值是常见的问题之一。正确处理缺失值对于确保数据质量和分析结果的准确性至关重要。Pandas提供了多种方法来处理缺失值,本章将通过三个实战案例来展示如何有效处理缺失值,适合新人学习。
案例1:不同缺失比例的列,采用不同处理策略
当数据集中的不同列有不同程度的缺失时,我们可以根据缺失比例选择不同的处理策略。例如,缺失率低的列可以用均值填充,缺失率高的列可以考虑删除或用其他方法填充。
步骤:
- 计算每列的缺失比例。
- 根据比例制定策略:
- 如果缺失比例小于5%,可以用均值或中位数填充。
- 如果缺失比例在5%到20%之间,可以使用更复杂的填充方法,如插值。
- 如果缺失比例超过20%,可以考虑删除该列,或者使用机器学习模型预测。
代码示例:
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {
'A': [1, 2, np.nan, 4, 5],
'B': [np.nan, 2, 3, np.nan, np.nan],
'C': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)
# 计算缺失比例
missing_ratio = df.isnull().sum() / len(df) * 100
print("缺失比例:")
print(missing_ratio)
# 根据比例处理
for col in df.columns:
if missing_ratio[col] < 5:
df[col].fillna(df[col].mean(), inplace=True)
elif missing_ratio[col] < 20:
df[col].fillna(df[col].median(), inplace=True)
else:
df.drop(columns=[col], inplace=True) # 如果缺失比例高,删除列
print("\n处理后的DataFrame:")
print(df)
案例2:按分组填充缺失值
在某些情况下,缺失值的填充应该基于数据的分组。例如,按地区分组后,用该地区的平均值填充销量缺失值。
步骤:
- 使用
groupby方法将数据分组。 - 对每组应用填充方法,如填充均值。
代码示例:
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {
'地区': ['北京', '北京', '上海', '上海', '广州', '广州'],
'销量': [100, np.nan, 150, np.nan, 200, 250],
'月份': [1, 2, 1, 2, 1, 2]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 按地区分组,并用每组的均值填充缺失值
df['销量'] = df.groupby('地区')['销量'].transform(lambda x: x.fillna(x.mean()))
print("\n按分组填充后的DataFrame:")
print(df)
案例3:插值法填充时间序列数据中的缺失值
对于时间序列数据,缺失值可以通过插值法填充,如线性插值,以保持数据的连续性。
步骤:
- 确保数据按时间排序。
- 使用Pandas的
interpolate方法进行插值。
代码示例:
import pandas as pd
import numpy as np
# 创建一个时间序列示例DataFrame
dates = pd.date_range('2023-01-01', periods=5, freq='D')
data = {
'日期': dates,
'值': [10, np.nan, 30, np.nan, 50]
}
df = pd.DataFrame(data)
df.set_index('日期', inplace=True) # 设置日期为索引
print("原始时间序列数据:")
print(df)
# 使用线性插值填充缺失值
df['值'] = df['值'].interpolate(method='linear')
print("\n插值后的时间序列数据:")
print(df)
总结
通过本章的三个案例,我们学习了如何根据不同情况处理Pandas中的缺失值:根据缺失比例选择策略、按分组填充以及使用插值法处理时间序列。这些方法可以帮助我们有效清洗数据,为后续分析打下基础。在实际应用中,应根据数据的特点和需求选择合适的方法。
开发工具推荐