pandas.DataFrame.fillna#

DataFrame.fillna(value, *, axis=None, inplace=False, limit=None)[源代码]#

value 填充 NA/NaN 值。

参数:
标量, 字典, 序列, 或数据框

用于填充空洞的值(例如 0),或者是一个指定每个索引(对于 Series)或列(对于 DataFrame)使用哪个值的字典/Series/DataFrame。不在字典/Series/DataFrame 中的值将不会被填充。该值不能是列表。

{0 或 ‘index’} 用于 Series, {0 或 ‘index’, 1 或 ‘columns’} 用于 DataFrame

沿哪个轴填充缺失值。对于 Series,此参数未使用并默认为 0。

inplacebool, 默认为 False

如果为真,就地填充。注意:这将修改此对象的任何其他视图(例如,DataFrame中列的非复制切片)。

限制int, 默认 None

这是沿整个轴填充NaN的最大条目数。如果不是None,则必须大于0。

返回:
Series/DataFrame 或 None

如果 inplace=True,则用缺失值填充的对象或为 None。

参见

ffill

通过将最后一个有效观测值传播到下一个有效观测值来填充值。

bfill

通过使用下一个有效观测值来填补空缺。

插值

使用插值填充NaN值。

reindex

使对象符合新索引。

asfreq

将时间序列转换为指定频率。

注释

对于非对象类型,value=None 将使用该类型的 NA 值。更多详细信息请参见 填充缺失数据 部分。

例子

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

将所有 NaN 元素替换为 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

将列 ‘A’, ‘B’, ‘C’ 和 ‘D’ 中的所有 NaN 元素分别替换为 0, 1, 2 和 3。

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

请注意,列 D 不受影响,因为它不在 df2 中。