【问题标题】:Return Column(s) if they Have a certain Percentage of NaN Values (Python)如果它们具有一定百分比的 NaN 值,则返回列(Python)
【发布时间】:2020-03-28 10:00:34
【问题描述】:

希望仅返回具有至少 25% NaN 值的列作为新的 df

我正在考虑使用 .loc.isnullcount条件语句 >,但我不确定最有效的方法是什么。感谢所有帮助。

DF:


df1:
(axis 1 = A,B,C = series)

    A    B    C
1   1    2    1
2   NaN  NaN  3
3   4    NaN  1
4   2    NaN  4 

思考:

df.loc[df['series'] == nan >= 25% ]

或者类似的东西:


if count(nan) for column(x) in 'series' is >= (.25 * (count(x)))
    return loc[x]

返回新数据框

df2:

    A    B    
1   1    2    
2   NaN  NaN  
3   4    NaN  
4   2    NaN

返回 A 和 B,因为它们中的每一个都有至少 25% 的列条目为 NaN(缺失)

【问题讨论】:

  • @Chris 不幸的是没有。这有助于确定每列的百分比,但在基于给定百分比阈值重构 df 方面,它似乎缺乏。我的目标是跳过识别每列缺失值的过程,直接跳转到一个新的 df,它只包含遵循阈值规则的列。
  • @Alex 你不能用dropna()吗?
  • @AlexanderCécile 据我了解,dropna() 会丢弃 NaN,不是吗?我想删除至少没有 25% NaN 的列。所以也许我可以在有条件的情况下使用它?但我不知道如何应用它。
  • @Alex 查看docs,您可以让它删除 NA 值(thresh 参数)的数量大于您拥有的列数的 25% 的行。跨度>

标签: python pandas conditional-statements nan


【解决方案1】:

根据https://datascience.stackexchange.com/q/12645的回复。

na_count_mask = df.isna().sum(axis=0) >= (col_count // 4)

res_df = df.loc[na_count_mask]

【讨论】:

  • 太棒了!谢谢!
  • @Alex 我本可以拆分那一行,以便于阅读。一切都很好,很清楚吗?
  • 非常!再次感谢
猜你喜欢
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2019-06-15
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多