这是 pandas 快速上手系列的第 6 篇文章,本篇详细介绍了pandas.fillna() 填充缺失值(NaN)的各种妙招,包括用常数值填充缺失值、用前一个值或后一个值填充、用列的均值、不同列使用不同值填充等方法,希望对你有帮助。
fillna() 是 Pandas 中常用的处理缺失值 (NaN) 的函数。它可以用指定的值或插值方法来填充 DataFrame 或 Series 中的缺失值。
先初始化一个数据集 dataframe
代码语言:javascript复制In [43]: import pandas as pd
...:
...: df = pd.DataFrame({
...: 'A': [1, 2, None, 4],
...: 'B': [None, 2, 3, None]
...: })
In [48]: df
Out[48]:
A B
0 1.0 NaN
1 2.0 2.0
2 NaN 3.0
3 4.0 NaN
基本用法
用一个常数值填充缺失值, 用一个固定值替换 NaN
代码语言:javascript复制df_filled = df.fillna(0)
print(df_filled)
A B
0 1.0 0.0
1 2.0 2.0
2 0.0 3.0
3 4.0 0.0
用前一个值填充缺失值,则第一行的 NaN 会被跳过填充,设置 method='ffill'
代码语言:javascript复制In [44]: # 用前一个值填充缺失值
...: df_filled = df.fillna(method='ffill')
...: print(df_filled)
A B
0 1.0 NaN
1 2.0 2.0
2 2.0 3.0
3 4.0 3.0
用后一个值填充缺失值,则最后一行的 NaN 会被跳过,设置 method='bfill'
代码语言:javascript复制In [45]: # 用后一个值填充缺失值
...: df_filled = df.fillna(method='bfill')
...: print(df_filled)
A B
0 1.0 2.0
1 2.0 2.0
2 4.0 3.0
3 4.0 NaN
用列的均值填充缺失值
代码语言:javascript复制In [47]: df.fillna(df.mean())
Out[47]:
A B
0 1.000000 2.5
1 2.000000 2.0
2 2.333333 3.0
3 4.000000 2.5
不同列使用不同值填充,下面是 A 列空值用0填充,B 列的空值用 1 填充
代码语言:javascript复制In [49]: df.fillna({'A': 0, 'B': 1})
Out[49]:
A B
0 1.0 1.0
1 2.0 2.0
2 0.0 3.0
3 4.0 1.0
限制填充次数,每列最多填充 1 次
代码语言:javascript复制In [51]: df.fillna(method='ffill', limit=1)
Out[51]:
A B
0 1.0 NaN
1 2.0 2.0
2 2.0 3.0
3 4.0 3.0