介绍
在本教程中,您将学习如何使用pandas的DataFrame dropna()
函数。
NA
值表示“不可用”。这可以应用于 Null
、None
、pandas.NaT
或 numpy.nan
。使用 dropna()
将删除具有这些值的行和列。这有助于提供仅有效数据。
默认情况下,此函数返回一个新的 DataFrame,而源 DataFrame 保持不变。
此教程已验证通过 Python 3.10.9、pandas 1.5.2 和 NumPy 1.24.1。
语法
dropna()
接受以下参数:
axis
:{0 (或 'index'), 1 (或 'columns')},默认 0
- 如果
0
,则删除具有缺失值的行。 - 如果
1
,则删除具有缺失值的列。 how
:{'any', 'all'},默认 'any'
- 如果为
'any'
,则如果任何值为NA
,则删除行或列。 - 如果为
'all'
,则如果所有值都为NA
,则删除行或列。 thresh
: (可选)一个int
值,用于指定丢弃操作的阈值。subset
: (可选)列标签或标签序列,用于指定行或列。inplace
: (可选)一个bool
值。- 如果
True
,则源DataFrame将被更改,并返回None
。
构造样本DataFrame
构造一个包含有效值和无效值的样本DataFrame:
此代码将打印出DataFrame:
OutputName ID Population Regions
0 Shark 1 100 1
1 Whale 2 200 None
2 Jellyfish 3 NaN NaT
3 Starfish 4 NaT NaT
然后添加一个具有NA
值的附加行和列的第二个DataFrame:
这将输出一个新的DataFrame:
OutputName ID Population Regions Endangered
0 Shark 1 100 1 NaT
1 Whale 2 200 None NaT
2 Jellyfish 3 NaN NaT NaT
3 Starfish 4 NaT NaT NaT
4 NaT NaT NaT NaT NaT
您将在随后的示例中使用前述的DataFrame。
删除所有带有缺失值的行
使用dropna()
来删除具有任何None
、NaN
或NaT
值的行:
这将输出:
OutputName ID Population Regions
0 Shark 1 100 1
A new DataFrame with a single row that didn’t contain any NA
values.
删除所有包含缺失值的列
使用 dropna()
并设置 axis=1
来移除包含任何 None
、NaN
或 NaT
值的列:
包含任何 None
、NaN
或 NaT
值的列将被删除:
OutputName ID
0 Shark 1
1 Whale 2
2 Jellyfish 3
3 Starfish 4
A new DataFrame with a single column that contained non-NA
values.
如果所有
值均为Null
,则删除行或列,并使用how
使用第二个数据框和how
:
所有值都等于NA
的行将被删除:
OutputName ID Population Regions Endangered
0 Shark 1 100 1 NaT
1 Whale 2 200 None NaT
2 Jellyfish 3 NaN NaT NaT
3 Starfish 4 NaT NaT NaT
第五行被删除。
接下来,使用how
并指定axis
:
所有值都等于NA
的列将被删除:
OutputName ID Population Regions
0 Shark 1 100 1
1 Whale 2 200 None
2 Jellyfish 3 NaN NaT
3 Starfish 4 NaT NaT
4 NaT NaT NaT NaT
第五列被删除。
如果达到阈值,则删除行或列使用thresh
使用带有thresh
的第二个DataFrame来删除不满足至少3
个非NA
值阈值的行:
不具有至少3
个非NA
的行将被删除:
OutputName ID Population Regions Endangered
0 Shark 1 100 1 NaT
1 Whale 2 200 None NaT
第三、第四和第五行被删除。
针对特定子集
删除行或列
使用带有subset
的第二个DataFrame来删除Population
列中带有NA
值的行:
具有Population
带有NA
值的行将被删除:
OutputName ID Population Regions Endangered
0 Shark 1 100 1 NaT
1 Whale 2 200 None NaT
第三、第四和第五行被删除。
您还可以在DataFrame中删除列时指定subset
中的index
值:
包含subset
中行1
和2
的NA
值的列:
OutputName ID
0 Shark 1
1 Whale 2
2 Jellyfish 3
3 Starfish 4
4 NaT NaT
第三、第四和第五列被删除。
在删除行或列后更改源DataFrame
默认情况下,dropna()
不会修改源DataFrame。然而,在某些情况下,您可能希望通过使用inplace
来节省内存,特别是在处理大型源DataFrame时。
此代码不使用dfresult
变量。
这将输出:
OutputName ID Population Regions
0 Shark 1 100 1
原始DataFrame已被修改。
结论
在本文中,您使用了dropna()
函数来删除具有NA
值的行和列。
继续学习更多Python和pandas教程 – Python pandas模块教程,pandas删除重复行。
参考
Source:
https://www.digitalocean.com/community/tutorials/pandas-dropna-drop-null-na-values-from-dataframe