Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dataframe中查找哪些列包含任何NaN值_Python_Pandas_Dataframe_Nan - Fatal编程技术网

Python 如何在dataframe中查找哪些列包含任何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值的数据帧:


问题:如何确定哪些列包含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())