【问题标题】:Facing an errors while executing a list comprehension执行列表推导时遇到错误
【发布时间】:2020-08-08 01:31:48
【问题描述】:
features_with_na=[features for features in df_main.columns if df_main[features].isna().sum()>1]

这个列表理解应该给我所有缺少值的列。执行时出现以下错误-

ValueError                                Traceback (most recent call last)
<ipython-input-26-0878dbe5183a> in <module>()
----> 1 features_with_na=[features for features in df_main.columns if df_main[features].isna().sum()>1]

1 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __nonzero__(self)
   1477     def __nonzero__(self):
   1478         raise ValueError(
-> 1479             f"The truth value of a {type(self).__name__} is ambiguous. "
   1480             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1481         )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有什么想法吗?

【问题讨论】:

  • 错误信息不是说要把df_main[features].isna().sum()&gt;1改成df_main[features].isna().any()吗?
  • 在 python 3.7.6 和 pandas 1.0.1 中运行良好。但是为什么要列出理解呢?就做df.columns[df.isna().sum() &gt; 1]

标签: python pandas dataframe dataset list-comprehension


【解决方案1】:

pd.dataframe.ISNA在熊猫系列上调用时,返回长度等于DataFrame中的记录数的布尔值迭代

#calling isna on column returns series like [True, False, True, True...] equal to
#number of elements in df
df_features = [df_main[feature].isna() for feature in df_main.columns]

counts = [ftr[ftr == False].sum() in df_features]

我建议使用来自CMET的解决方案,但此答案确实返回您想要的列表理解

【讨论】:

    【解决方案2】:

    当您不必使用列表理解时:

    # sample data
    df = pd.DataFrame(np.random.rand(10,3), columns=list('abc'))
    df.iloc[3, 2] = np.nan
    df.iloc[5, 1] = np.nan
    df.iloc[6, 1] = np.nan
    # just use boolean indexing
    df.columns[df.isna().sum() > 1]
    
    # Index(['b'], dtype='object')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多