Pandas 的DataFrame.fillna(~)
方法用指定值或填充规则填充NaN
(缺失值)。
参数
1.value
| scalar
或 dict
或 Series
或 DataFrame
| optional
要替换 NaN
的值。如果指定了 dict
或 Series
,则键/索引是列标签,值是填充符。
2. method
| None
或 string
| optional
填充 NaN
的规则:
值 |
说明 |
---|---|
|
使用下一个非 |
|
使用之前的非 |
|
不执行任何填充。 |
默认情况下,method=None
。
警告
仅指定 value
或 method
- 不能同时指定两者。
3. axis
| int
或 string
| optional
是否填充每列或每行:
轴 |
说明 |
---|---|
|
按列填充 |
|
按行填充 |
默认情况下,axis=0
。请注意,仅当您指定 method
而不是 value
时,这才相关。
4. inplace
| boolean
| optional
-
如果是
True
,那么该方法将直接修改源DataFrame,而不是创建新的DataFrame。 -
如果是
False
,则将创建并返回一个新的DataFrame。
默认情况下,inplace=False
。
5. limit
| None
或 int
| 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
仅填充某些列
要指定要填充的列,请提供 dict
或 Series
,如下所示:
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
请注意 A
和 C
列中仍然包含 NaN
。
相关用法
- Python PySpark DataFrame fillna方法用法及代码示例
- Python PySpark DataFrame filter方法用法及代码示例
- Python Pandas DataFrame filter方法用法及代码示例
- Python Pandas DataFrame first_valid_index方法用法及代码示例
- Python Pandas DataFrame first方法用法及代码示例
- Python Pandas DataFrame floordiv方法用法及代码示例
- Python PySpark DataFrame foreach方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
- Python Pandas DataFrame pop方法用法及代码示例
- Python Pandas DataFrame nsmallest方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame items方法用法及代码示例
- Python Pandas DataFrame max方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python Pandas DataFrame agg方法用法及代码示例
- Python Pandas DataFrame copy方法用法及代码示例
- Python Pandas DataFrame pow方法用法及代码示例
- Python Pandas DataFrame insert方法用法及代码示例
- Python Pandas DataFrame lt方法用法及代码示例
- Python Pandas DataFrame all方法用法及代码示例
- Python Pandas DataFrame unstack方法用法及代码示例
- Python Pandas DataFrame mean方法用法及代码示例
- Python Pandas DataFrame tz_convert方法用法及代码示例
- Python Pandas DataFrame isin方法用法及代码示例
- Python PySpark DataFrame collect方法用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | fillna method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。