Bootstrap

python_pandas_fillna_填充空值

pandas.DataFrame.fillna

0、功能:使用指定的方法填充NA/NaN值

1、详解

(1)、函数形式

DataFrame.fillna(value=None, *, method=None, axis=None, inplace=False, limit=None, downcast=_NoDefault.no_default)

(2)、参数

  • value: 标量、字典、series、dataframe
    • 标量:全部填写为同一特定值
    • 字典、dataframe:按列填写不同特定值
    • series:按index填写不同特定值
  • method: {‘backfill’, ‘bfill’, ‘ffill’, None}, default None
    • 定义了填充空值的方法
    • ‘ffill’ 用前一个非空缺值填充
    • ‘bfill’ 用后一个非空缺值填充
  • axis: {0 or ‘index’} for Series, {0 or ‘index’, 1 or ‘columns’} for DataFrame
    • ‘index’:按行填充
    • 'columns’按列填充
  • inplace: bool, default False
    • 是否用新生成的列表替换原列表
    • 如果为True,则在原DataFrame上进行操作,返回值为None。
  • limit: int, default None
    • 如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)

2、例子(官方教程)

生成一个dataframe对象

>>> df = pd.DataFrame([[np.nan, 2, np.nan, 0],
...                    [3, 4, np.nan, 1],
...                    [np.nan, np.nan, np.nan, np.nan],
...                    [np.nan, 3, np.nan, 4]],
...                   columns=list("ABCD"))
>>> df
     A    B   C    D
0  NaN  2.0 NaN  0.0
1  3.0  4.0 NaN  1.0
2  NaN  NaN NaN  NaN
3  NaN  3.0 NaN  4.0

用0填充

df.fillna(0)
     A    B    C    D
0  0.0  2.0  0.0  0.0
1  3.0  4.0  0.0  1.0
2  0.0  0.0  0.0  0.0
3  0.0  3.0  0.0  4.0

用字典填充(不同的列用不同的填充方式)

>>> values = {"A": 0, "B": 1, "C": 2, "D": 3}
>>> df.fillna(value=values)
     A    B    C    D
0  0.0  2.0  2.0  0.0
1  3.0  4.0  2.0  1.0
2  0.0  1.0  2.0  3.0
3  0.0  3.0  2.0  4.0

只替换第一个NaN元素

>>> df.fillna(value=values, limit=1)
     A    B    C    D
0  0.0  2.0  2.0  0.0
1  3.0  4.0  NaN  1.0
2  NaN  1.0  NaN  3.0
3  NaN  3.0  NaN  4.0

用dataframe填充(只有相同的列名才会填充)

>>> df2 = pd.DataFrame(np.zeros((4, 4)), columns=list("ABCE"))
>>> df.fillna(df2)
     A    B    C    D
0  0.0  2.0  0.0  0.0
1  3.0  4.0  0.0  1.0
2  0.0  0.0  0.0  NaN
3  0.0  3.0  0.0  4.0
;