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


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


Pandas DataFrame.dropna(~) 方法删除缺少值的行或列。

参数

1.axis | intstring | optional

是否删除缺失值的行或列:

说明

0"index"

扫描每一行,如果存在缺失值,则删除该行。

1"columns"

扫描每一列,如果存在缺失值,则删除该列。

默认情况下,axis=0

2. how | string | optional

删除行/列的标准:

如何

说明

"any"

如果该行或列至少包含一个缺失值,则将其删除。

"all"

如果行或列包含所有缺失值,则将其删除。

默认情况下,how="any"

3. thresh | int | optional

行/列必须至少包含非NaN 的数量才不会被删除。例如,如果 thresh=2 ,那么

  • 具有 1 个非缺失值的列将被删除。

  • 将保留包含 2 个非缺失值的列。

  • 将保留包含 3 个非缺失值的列。

默认情况下,没有设置最小值。

4. subset | stringsarray-like | optional

逐行执行扫描时(当 axis=0 时)检查缺失值的列。默认情况下,会考虑所有列。请参阅下面的示例以进行说明。

5. inplace | boolean | optional

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

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

默认情况下,inplace=False

返回值

DataFrame,其中包含根据提供的参数删除的缺失值的行或列。

例子

考虑以下 DataFrame :

df = pd.DataFrame({"A":[pd.np.NaN,2],"B":[3,4],"C":[5,6]})
df



   A    B  C
0  NaN  3  5
1  2.0  4  6

删除缺失值的行

要删除缺少值的行:

df.dropna()   # or axis=0 or axis="index"



   A    B  C
1  2.0  4  6

请注意第一行(即 index=0 )如何被删除,因为它包含缺失值。

删除缺失值的列

要删除缺少值的列:

df.dropna(axis="columns")   # or axis=1



   B  C
0  3  5
1  4  6

请注意A 列由于包含缺失值而被删除。

删除包含所有缺失值的列

考虑以下 DataFrame :

df = pd.DataFrame({"A":[pd.np.NaN,2], "B":[3,4], "C":[pd.np.NaN,pd.np.NaN]})
df



   A    B  C
0  NaN  3  NaN
1  2.0  4  NaN

要删除值全部为缺失值的列,请设置 how="all"

df.dropna(how="all" axis="columns")



   A    B
0  NaN  3
1  2.0  4

请注意如何仅删除 C 列,因为它仅包含缺失值。

设置阈值

考虑以下 DataFrame :

import numpy as np
df = pd.DataFrame({"A":["a",np.nan,np.nan],"B":[3,4,np.nan]})
df



   A    B
0  a    3.0
1  NaN  4.0
2  NaN  NaN

要删除至少包含 2 个非 NaN 值的列,请设置 thresh=2

df.dropna(thresh=2, axis=1)



   B
0  3.0
1  4.0
2  NaN

请注意,只有一个非缺失值的列 A 被删除,而具有 2 个非缺失值的列 B 被保留。

仅删除某些列缺失值的行

考虑以下 DataFrame :

df = pd.DataFrame({"A":[pd.np.NaN,2], "B":[3,4], "C":[pd.np.NaN,pd.np.NaN]})
df



   A    B  C
0  NaN  3  NaN
1  2.0  4  NaN

要删除缺少与 A 列对应的值的行:

df.dropna(subset=["A"], axis="index")



   A    B  C
1  2.0  4  NaN

请注意,尽管两行都包含缺失值,但仅删除了第一行 (index=0)。这是因为,通过指定 subset=["A"] ,该方法仅检查 A 列中的缺失值。

仅删除某些行的缺失值的列

考虑以下 DataFrame :

df = pd.DataFrame({"A":[pd.np.NaN,2], "B":[3,4], "C":[5,6]})
df



   A    B  C
0  NaN  3  5
1  2.0  4  6

要删除缺少与行索引 1 对应的值的列:

df.dropna(subset=[1], axis=1)   # or axis="columns"



   A    B
0  NaN  3
1  2.0  4

请注意,尽管 A 列也包含缺失值,但仅删除了 C 列。这是因为通过指定 subset=[1] ,该方法将仅检查行 index=1(即第二行)处的缺失值。由于与 index=1 行中的列 C 对应的值是缺失值,因此该方法删除了列 C

就地删除行/列

要就地删除行或列,我们需要设置 inplace=True 。这将直接修改源DataFrame,而不是创建并返回新的 DataFrame。

作为示例,请考虑以下 DataFrame:

df = pd.DataFrame({"A":[pd.np.NaN,2], "B":[3,4], "C":[5,6]})
df



   A    B  C
0  NaN  3  5
1  2.0  4  6

我们使用 inplace=True 删除包含缺失值的所有行:

df.dropna(inplace=True)
df



   A    B  C
1  2.0  4  6

如输出所示,源 DataFrame 已被修改。

相关用法


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