介绍
在本教程中,您将学习如何使用panda的DataFrame dropna()函数。
NA值为不可用。这可能适用于Null,None,pandas.NaT或numpy.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,NaN或NaT值的行:
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,NaN或NaT值的列:
1dfresult = df1.dropna(axis=1)
2print(dfresult)
包含任何None、NaN或NaT值的列将被放下:
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的第二个数据框来丢下不符合至少3非NA值的门槛的行:
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)
包含字符串1和2的子集中的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。