Pandas 中具有 NaN 值的子集列
Posted
技术标签:
【中文标题】Pandas 中具有 NaN 值的子集列【英文标题】:Subset columns with NaN values in Pandas 【发布时间】:2017-09-24 21:51:23 【问题描述】:在这里搜索并尝试了几个答案,但它们都是为了返回带有 NaN 的行。我只想返回具有 NaN 值的列。例如下面的df。如何选择列“A”和“LG”?
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
【问题讨论】:
可能被骗:How to find which columns contain any NaN value in Pandas dataframe (python) 部分我相信。我要一个子集,但是那个只返回列名 好点,谢谢!我更新了that post 【参考方案1】:我认为您需要先将示例中的字符串 NaN
替换为 np.nan
:
df = pd.DataFrame(
'H': ['a','b', 'c'],
'A': [np.nan,'d', 'e'],
'LG':['AR1', 'RO1', np.nan],
)
然后通过isnull
和any
检查:
mask = df.isnull().any()
print (mask)
A True
H False
LG True
dtype: bool
最后使用index
的布尔索引:
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
【讨论】:
【参考方案2】:这将返回所有包含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
【讨论】:
以上是关于Pandas 中具有 NaN 值的子集列的主要内容,如果未能解决你的问题,请参考以下文章
查找具有 NaN 值的 DataFrame 列表的索引 - Pandas
如何使用 PANDAS 获取具有 NAN 值的列名并将这些列名存储在列表中? [复制]
在 pandas 数据框中显示具有一个或多个 NaN 值的行
将具有多个 nan 值的 pandas 系列减少到一个集合会给出多个 nan 值