pandas.options.mode.use_inf_as_na = True
pandas 0.24以上版本
pd.Series([1, 2, np.nan, 4], dtype=“Int64”) # 将数据类型设为Int64,如果不指定,则报以下错误
# cannot convert float NaN to integer
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的一列填充另一列
df["Cat1"].fillna(df["Cat2"]) # 要保证df["Cat1"]与df["Cat2"]的索引一致
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的后一个数插值
1.找出df中全为空的行
df.loc[df.isnull().all(axis=1)]
2.找出df中含有缺失值的行
df.loc[df.isnull().any(axis=1)]