2017-04-27 37 views
2

在SO上搜索并尝试了几个答案,但它们都是用NaN返回行的。我想只返回带有NaN值的列。例如下面的df。我如何选择'A'和'LG'列?在大熊猫中有NaN值的子集列

df = pd.DataFrame(
     {'H': ['a','b', 'c'], 
     'A': [np.nan,'d', 'e'], 
     'LG':['AR1', 'RO1', np.nan], 
     }) 

print(df) 

    A H LG 
0 NaN a AR1 
1 d b RO1 
2 e c NaN 
+1

可能欺骗:如何找到哪些列包含在数据帧熊猫(蟒)任何的NaN值](http://stackoverflow.com/questions/36226083/how-to-find-which-columns-contain -any-nan-value-in-pandas-dataframe-python) – MaxU

+0

部分我相信如此。我要求的是一个子集,但是那个只返回列名只有 – Zanshin

+0

好点,谢谢!我更新了[那篇文章](http://stackoverflow.com/a/36226137/5741205) – MaxU

回答

3

我想你需要先在样本替换字符串NaNnp.nan

mask = df.isnull().any() 
print (mask) 
A  True 
H  False 
LG  True 
dtype: bool 

最后使用布尔索引与index

df = pd.DataFrame(
     {'H': ['a','b', 'c'], 
     'A': [np.nan,'d', 'e'], 
     'LG':['AR1', 'RO1', np.nan], 
     }) 

然后通过isnullany检查

print (mask.index[mask]) 
Index(['A', 'LG'], dtype='object') 

如果需要添加列loc

print (df.loc[:, mask]) 
    A LG 
0 NaN AR1 
1 d RO1 
2 e NaN 
+0

太棒了,这个工程。谢谢 – Zanshin

1

这将返回一个包含NaN所有列。

df = pd.DataFrame(
     {'H': ['a','b', 'c'], 
     'A': [np.nan,'d', 'e'], 
     'LG':['AR1', 'RO1', np.nan], 
     }) 

x = pd.isnull(df).any() 

print(df[x.index[x]]) 

    A LG 
0 NaN AR1 
1 d RO1 
2 e Na