谜一样的空值? pandas.fillna 妙招拨云见日

2024-05-27 20:22:50 浏览数 (2)

这是 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

0 人点赞