介绍
在本教程中,您将学习如何使用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。