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],
         )

然后通过isnullany检查:

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 值

基于 MySQL、H2 和 DB2 列子集的具有唯一值的 SELECT

python&pandas:列表中具有值的子集数据框[重复]