如何使用 Python pandas dropna() 从数据帧中删除 NA 值

介绍

在本教程中,您将学习如何使用panda的DataFrame dropna()函数。

NA值为不可用。这可能适用于Null,None,pandas.NaTnumpy.nan。使用dropna()将降低这些值的行和列。

默认情况下,此函数返回一个新的数据框,而源数据框保持不变。

本教程已通过 Python 3.10.9, pandas 1.5.2 和 NumPy 1.24.1 进行验证。

语法

dropna()具有以下参数:

1dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
  • axis: 0 (或 'index'), 1 (或 'columns'),默认值 0
  • 如果 0,丢失值的行
  • 如果 1,丢失值的列 *丢失值的行或列: `{'any', 'all',默认值 ``
  • 如果 'any',丢失行或列,如果任何值是 NA`.
  • 如果 'all,丢失行或列,如果所有值是 NA( _*) `thresh: (可选)放弃值,以指定操作的门槛。

构建样本数据框架

构建包含有效和无效值的数据框样:

 1[label dropnaExample.py]
 2import pandas as pd
 3import numpy as np
 4
 5d1 = {
 6'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish'],
 7'ID': [1, 2, 3, 4],
 8'Population': [100, 200, np.nan, pd.NaT],
 9'Regions': [1, None, pd.NaT, pd.NaT]
10}
11
12df1 = pd.DataFrame(d1)
13print(df1)

此代码将打印出数据框:

1[secondary_label Output]
2Name ID Population Regions
30 Shark 1 100 1
41 Whale 2 200 None
52 Jellyfish 3 NaN NaT
63 Starfish 4 NaT NaT

然后添加第二个数据框,附加有NA值的行和列:

 1d2 = {
 2'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish', pd.NaT],
 3'ID': [1, 2, 3, 4, pd.NaT],
 4'Population': [100, 200, np.nan, pd.NaT, pd.NaT],
 5'Regions': [1, None, pd.NaT, pd.NaT, pd.NaT],
 6'Endangered': [pd.NaT, pd.NaT, pd.NaT, pd.NaT, pd.NaT]
 7}
 8
 9df2 = pd.DataFrame(d2)
10print(df2)

这将产生一个新的数据框架:

1[secondary_label Output]
2Name ID Population Regions Endangered
30 Shark 1 100 1 NaT
41 Whale 2 200 None NaT
52 Jellyfish 3 NaN NaT NaT
63 Starfish 4 NaT NaT NaT
74 NaT NaT NaT NaT NaT

您将在以下示例中使用前面的数据框架。

抛弃所有缺失价值的行列

使用dropna()删除具有任何None,NaNNaT值的行:

1[label dropnaExample.py]
2dfresult = df1.dropna()
3print(dfresult)

这将产生:

1[secondary_label Output]
2Name ID Population Regions
30 Shark 1 100 1

新 DataFrame 具有单行,不包含任何NA值。

丢弃所有缺失值的列

使用dropna()axis=1来删除具有任何None,NaNNaT值的列:

1dfresult = df1.dropna(axis=1)
2print(dfresult)

包含任何NoneNaNNaT值的列将被放下:

1[secondary_label Output]
2Name ID
30 Shark 1
41 Whale 2
52 Jellyfish 3
63 Starfish 4

一个新的 DataFrame 具有包含非NA值的单一列。

如果所有值是Null如何值则丢下行或列

使用第二个数据框和如何:

1[label dropnaExample.py]
2dfresult = df2.dropna(how='all')
3print(dfresult)

所有值等于NA的行将被放下:

1[secondary_label Output]
2Name ID Population Regions Endangered
30 Shark 1 100 1 NaT
41 Whale 2 200 None NaT
52 Jellyfish 3 NaN NaT NaT
63 Starfish 4 NaT NaT NaT

第五轮被淘汰了。

接下来,使用如何并指定:

1[label dropnaExample.py]
2dfresult = df2.dropna(how='all', axis=1)
3print(dfresult)

具有所有值等于NA的列将被放下:

1[secondary_label Output]
2Name ID Population Regions
30 Shark 1 100 1
41 Whale 2 200 None
52 Jellyfish 3 NaN NaT
63 Starfish 4 NaT NaT
74 NaT NaT NaT NaT

第五个栏目被抛弃了。

放下行或列如果一个门槛被越过

使用thresh的第二个数据框来丢下不符合至少3NA值的门槛的行:

1[label dropnaExample.py]
2dfresult = df2.dropna(thresh=3)
3print(dfresult)

行没有至少3的非NA将被抛弃:

1[secondary_label Output]
2Name ID Population Regions Endangered
30 Shark 1 100 1 NaT
41 Whale 2 200 None NaT

第三,第四和第五行被抛弃。

放下特定子集的行或列

使用子组的第二个数据框,在人口列中放下具有NA值的行:

1[label dropnaExample.py]
2dfresult = df2.dropna(subset=['Population'])
3print(dfresult)

具有NA值的人口的行将被删除:

1[secondary_label Output]
2Name ID Population Regions Endangered
30 Shark 1 100 1 NaT
41 Whale 2 200 None NaT

第三,第四和第五行被抛弃。

您也可以在从数据框中放下列时,在子集中指定索引值:

1[label dropnaExample.py]
2dfresult = df2.dropna(subset=[1, 2], axis=1)
3print(dfresult)

包含字符串12的子集中的NA值的列:

1[secondary_label Output]
2Name ID
30 Shark 1
41 Whale 2
52 Jellyfish 3
63 Starfish 4
74 NaT NaT

第三,第四和第五列被抛弃。

删除字符串或列后更改源DataFrame 以代替

默认情况下,dropna()不会更改源数据框,但在某些情况下,您可能希望使用代替来保存内存,当您使用大源数据框工作时。

1[label dropnaExample.py]
2df1.dropna(inplace=True)
3print(df1)

此代码不使用dfresult变量。

这将产生:

1[secondary_label Output]
2Name ID Population Regions
30 Shark 1 100 1

原始数据框架已被更改。

结论

在本文中,您使用dropna()函数删除具有NA值的行和列。

继续学习更多 Python 和 Pandas 教程 - Python pandas 模块教程, pandas Drop Duplicate Rows

Published At
Categories with 技术
Tagged with
comments powered by Disqus