当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame fillna方法用法及代码示例


Pandas 的DataFrame.fillna(~) 方法用指定值或填充规则填充NaN(缺失值)。

参数

1.value | scalardictSeriesDataFrame | optional

要替换 NaN 的值。如果指定了 dictSeries,则键/索引是列标签,值是填充符。

2. method | Nonestring | optional

填充 NaN 的规则:

说明

"backfill""bfill"

使用下一个非NaN 值进行填充。

"pad""ffill"

使用之前的非NaN值来填充。

None

不执行任何填充。

默认情况下,method=None

警告

仅指定 valuemethod - 不能同时指定两者。

3. axis | intstring | optional

是否填充每列或每行:

说明

0"index"

按列填充

1"columns"

按行填充

默认情况下,axis=0 。请注意,仅当您指定 method 而不是 value 时,这才相关。

4. inplace | boolean | optional

  • 如果是True,那么该方法将直接修改源DataFrame,而不是创建新的DataFrame。

  • 如果是False,则将创建并返回一个新的DataFrame。

默认情况下,inplace=False

5. limit | Noneint | optional

  • 如果指定method,则limit 是要填充的连续NaN 的最大数量。如果连续NaN的数量超过limit ,则不进行填充。

  • 如果未指定method,则limit 是每行或每列执行的最大填充数。

默认情况下,limit=None

返回值

DataFrame,其中 NaN 被填充符替换。

例子

考虑以下 DataFrame :

df = pd.DataFrame({"A":[None,5,6],"B":[7,None,8],"C":[9,None,None]})
df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN

填充一个值

要使用值 10 填充 NaN

df.fillna(10)



   A     B     C
0  10.0  7.0   9.0
1  5.0   10.0  10.0
2  6.0   8.0   10.0

仅填充某些列

要指定要填充的列,请提供 dictSeries,如下所示:

df.fillna({"A":"*","C":10})



   A  B    C
0  *  7.0  9.0
1  5  NaN  10.0
2  6  8.0  10.0

请注意,B 列在此处仍然具有 NaN,因为提供的 dict 没有 B 键。

指定填充方法

考虑与之前相同的df

df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN
向后填充

要按列填充 NaN ,使用下一个非 NaN 值:

df.fillna(method="bfill")   # or method="backfill"



   A    B    C
0  5.0  7.0  9.0
1  5.0  8.0  NaN
2  6.0  8.0  NaN

请注意我们还剩下一些NaN。这是因为 NaN 之后没有任何值,因此我们没有填充值。

前向填充

要使用之前的非 NaN 值按列填充 NaN

df.fillna(method="ffill")   # or method="pad"



   A    B    C
0  NaN  7.0  9.0
1  5.0  7.0  9.0
2  6.0  8.0  9.0

同样,我们在 A[0] 处有一个 NaN,因为 NaN 之前没有任何值,因此我们没有填充值。

指定轴

仅供参考,这里是相同的 df

df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN

默认情况下, axis=0 ,这意味着填充方法按列应用:

df.fillna(method="ffill")      # axis=0



   A    B    C
0  NaN  7.0  9.0
1  5.0  7.0  9.0
2  6.0  8.0  9.0

我们可以通过设置 axis=1 来执行逐行填充:

df.fillna(method="ffill", axis=1)



   A    B    C
0  NaN  7.0  9.0
1  5.0  5.0  5.0
2  6.0  8.0  8.0

请注意,仅当您指定 method 参数而不是 value 时,axis 参数才相关。

指定限制

当指定参数方法时

如果method被指定,那么limit是最大数量连续的 NaN填写。

仅供参考,这里是相同的 df

df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN

要将连续 NaN 的数量限制为 1

df.fillna(method="ffill", limit=1)



   A    B    C
0  NaN  7.0  9.0
1  5.0  7.0  9.0
2  6.0  8.0  NaN

请注意单元格 C[2] 仍然具有 NaN 值。这是因为我们这里有 2 个连续的 NaN ,并且由于我们指定了 limit=1 ,所以只有第一个被填充。

未指定参数方法时

当未指定 method 时,limit 表示每行或每列执行的最大填充数。例如,考虑以下 DataFrame:

df = pd.DataFrame({"A":[None,5,None],"B":[7,None,8],"C":[9,None,None]})
df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  NaN  8.0  NaN

使用 limit=1 执行填充会产生:

df.fillna(2, limit=1)



   A    B    C
0  2.0  7.0  9.0
1  5.0  2.0  2.0
2  NaN  8.0  NaN

请注意 AC 列中仍然包含 NaN

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | fillna method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。