看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据清洗中,对于缺失值也会采用用均值填充的办法,让整行数据可用。对于无穷值,由于计算时极值会带来影响扩散,也会当缺失值处理,在本需求中也采用均值填充的办法。
我们需求没清洗的数据如下:
import pandas as pd
import numpy as np
df = pd. DataFrame([[np.nan, np.nan,1,2],
[np.inf, np.inf, 3, 4],
[1, 2, 1,1],
[2, 3, 2, 2]]
)
'''
0 1 2 3
0 NaN NaN 1 2
1 inf inf 3 4
2 1.0 2.0 1 1
3 2.0 3.0 2 2
'''
前两列有缺失值和无穷大值,需要将它们替换为所在列的平均值,需要注意的计算所在列平均值时,不能将其计算在内,即平均值计算公式中分母不包含它们。
可以将缺失值和无穷大值先全部转为缺失值,然后计算出当所有列的平均值,在使用 mean() 时,它的参数 skipna=True
,默认会跳过缺失值不计,符合我们的要求。
最后用 fillna 进行填充,它会针对不同列按上边用 mean() 计算得的 Series 按列对应填充缺失值。
将 DataFrame 中所有缺失值和无穷大值先全部转为缺失值:
df_temp = df.mask(np.isinf, np.nan)
df_temp = df.replace(np.inf, np.nan) # 效果同上
df_temp
'''
0 1 2 3
0 NaN NaN 1 2
1 NaN NaN 3 4
2 1.0 2.0 1 1
3 2.0 3.0 2 2
'''
计算所有列的平均值:
df_temp.mean()
'''
0 1.50
1 2.50
2 1.75
3 2.25
dtype: float64
'''
完成缺失值填充:
df_temp.fillna(df_temp.mean())
'''
0 1 2 3
0 1.5 2.5 1 2
1 1.5 2.5 3 4
2 1.0 2.0 1 1
3 2.0 3.0 2 2
'''
这样我们就完成了这个需求。
(完)
更新时间:Aug. 18, 2024, 4:01 p.m. 标签:pandas python 缺失值 无穷大