Python 如何在dataframe中查找哪些列包含任何NaN值
给定一个包含分散在各处的可能NaN值的数据帧:Python 如何在dataframe中查找哪些列包含任何NaN值,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,给定一个包含分散在各处的可能NaN值的数据帧: 问题:如何确定哪些列包含NaN值?特别是,我可以使用Pandas 0.22.0获取包含NaN的列名列表吗?更新: 较新的熊猫版本有新的方法和 作为列列表: In [74]: df.columns[df.isna().any()].tolist() Out[74]: ['a', 'b'] 要选择这些列(至少包含一个NaN值): 旧答案: 尝试使用: 或作为@root建议的更清晰版本: In [5]: df.isnull().any() Out[5
问题:如何确定哪些列包含NaN值?特别是,我可以使用Pandas 0.22.0获取包含NaN的列名列表吗?更新: 较新的熊猫版本有新的方法和 作为列列表:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
要选择这些列(至少包含一个NaN
值):
旧答案: 尝试使用: 或作为@root建议的更清晰版本:
In [5]: df.isnull().any()
Out[5]:
a True
b True
c False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']
要选择子集-至少包含一个NaN
值的所有列:
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
您可以使用
df.isnull().sum()
。它显示所有列和每个功能的总NAN。我使用这三行代码打印出至少包含一个空值的列名:
for column in dataframe:
if dataframe[column].isnull().any():
print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
这两种方法都应该有效:
df.isnull().sum()
df.isna().sum()
数据帧方法isna()
或isnull()
完全相同
注意:空字符串
“
被认为是错误的(不被认为是NA)我遇到了一个问题,我不得不在屏幕上目视检查许多列,因此需要一个短列表comp来过滤并返回有问题的列
nan_cols = [i for i in df.columns if df[i].isnull().any()]
如果这对拥有大量列的数据集中的任何人都有帮助,那么最好看看有多少列包含空值,有多少列不包含空值
print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))
print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))
print("Total no. of columns in the dataframe")
print(len(df.columns))
例如,在我的dataframe中,它包含82列,其中19列至少包含一个空值
此外,您还可以自动删除列和行,具体取决于哪个列具有更多的空值以下是智能执行此操作的代码:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
注意:上述代码将删除所有空值。如果需要空值,请先处理它们。这对我很有效
1。用于获取至少有1个空值的列。(列名)
2。用于获取包含count的列,其中至少有1个空值。
data[data.columns[data.isnull().any()]].isnull().sum()
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
[可选]
3。用于获取空计数的百分比。
data[data.columns[data.isnull().any()]].isnull().sum()
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
df.isna()。这样做:
df.isna().any()
对于具有NaN的任何列,将返回True;对于其余列,将返回False
df.columns[df.isnull().any()].tolist()
它将返回包含空行的列的名称这是方法之一
import pandas as pd
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan],'c':[np.nan,2,np.nan], 'd':[np.nan,np.nan,np.nan]})
print(pd.isnull(df).sum())
感谢您的回复!我想得到一个列名列表(我相应地更新了我的问题),你们知道怎么做吗?你们知道一个很好的方法来选择所有具有特定值而不是空值的列吗?别管!只需将.isnull()替换为.isin(['xxx'])即可搜索值而不是空值:df.columns[df.isin['xxx'].any()].tolist()
@gregorio099,我会这样做:df.columns[df.eq(search\u value.any()).tolist()
答案不错,已经投了赞成票。想法-您可以添加新函数isna
,notna
?df.isna().any()[lambda x:x]
适用于多种方法的甲烷储罐!您是否有基于此方法使用和设置条件的快速方法。?例如,如果col4、col5和col6为空:df=df[[“col1”、“col2”、“col3”]]
import pandas as pd
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan],'c':[np.nan,2,np.nan], 'd':[np.nan,np.nan,np.nan]})
print(pd.isnull(df).sum())