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