pandas缺失值处理

(1)如果想将inf或-inf当成NaN,可以通过以下设置

pandas.options.mode.use_inf_as_na = True

(2)NaN是个浮点数,如果某一特征的取值为整数,而且又含有NaN,如果想让NaN表示整形,则需要显示的指定数据类型

pandas 0.24以上版本

pd.Series([1, 2, np.nan, 4], dtype=“Int64”) # 将数据类型设为Int64,如果不指定,则报以下错误
# cannot convert float NaN to integer

(3)缺失值填充

  • 使用标量进行填充
df.fillna(0) # 对所有nan以0填充
df["col"].fillna(0) # 对col这一列的nan用0进行填充
  • 前向填充
df.fillna(method="pad", limit=2) # 前向填充,填充数量为2
常用的填充方法:
pad/ffill : 前向填充
bfill/backfill : 后向填充
df
Out[47]: 
   one       two     three
a  NaN -0.282863 -1.509059
c  NaN  1.212112 -0.173215
e  NaN       NaN       NaN
f  NaN       NaN       NaN
h  NaN -0.706771 -1.039575

In [48]: df.fillna(method='pad', limit=1)
Out[48]: 
   one       two     three
a  NaN -0.282863 -1.509059
c  NaN  1.212112 -0.173215
e  NaN  1.212112 -0.173215
f  NaN       NaN       NaN
h  NaN -0.706771 -1.039575

对df的某一列的某一段区间进行填充

d1 = pd.DataFrame({"a":[1, np.nan, 3, 4, 5, np.nan], "b":[3,4,5,6,7,8]})
#    a  b
0  1.0  3
1  NaN  4
2  3.0  5
3  4.0  6
4  5.0  7
5  NaN  8
d1["a"].fillna(method="ffill", limit=1, inplace=True) # inplace原地填充
# d1[["a"]].fillna(method="ffill", limit=1, inplace=True) # 这种方式不对
d1["a"].iloc[0:3].fillna(method="ffill", inplace=True) # 对a这一列的某段区间进行原地填充, 注意如果区间只含有一个元素使用d1["a"].iloc[i:i+1],
# d1["a"].iloc[i]返回的是一个数,而不是Series对象
# df["a"].iloc[0:3, :] #错误, Series没有第二维
# df[["a"]].iloc[0:3] 的结果与df[["a]].iloc[0:3, :]的结果一致

使用df的一列填充另一列

pandas缺失值处理_第1张图片

df["Cat1"].fillna(df["Cat2"]) # 要保证df["Cat1"]与df["Cat2"]的索引一致

结果为:
pandas缺失值处理_第2张图片

  • Interpolation
    Series和DataFrame对象都有interpolate()方法。
df.interpolate(method="linear", limit=1, limit_direction='backward') # 默认为线性插值
# limit_direction: backward, 默认forward, both:双向填充
# method可以的取值(可以是scipy中任意的一维插值方法)
 - linear
 - nearest
 - zero, 0阶样条插值
 - slinear, 一阶样条插值
 - quadratic,二阶样条插值
 - cubic,三界样条插值
 - previous,用NaN的前一个数插值
 - next,用NaN的后一个数插值
  • df.replace(src, target)
    将df中的src替换成target, df.replace({src1:tar1, src2: tar2,…})

(4)小知识点

1.找出df中全为空的行

df.loc[df.isnull().all(axis=1)]

2.找出df中含有缺失值的行

df.loc[df.isnull().any(axis=1)]

你可能感兴趣的:(笔记杂)