【问题标题】:filter rows based on a True value in a column - python pandas data frame根据列中的 True 值过滤行 - python pandas dataframe
【发布时间】:2019-12-08 20:05:49
【问题描述】:

我正在使用熊猫数据框。我有兴趣根据应用于现有数据名列的条件获取新数据框。这是数据框:

users_df
Out[30]: 
<class 'pandas.core.frame.DataFrame'>
Index: 3595 entries,
Data columns (total 9 columns):
screen_name        3595  non-null values

User_Desc          3595  non-null values

lang               3595  non-null values
followers_count    3579  non-null values
friends_count      3580  non-null values
listed_count       2665  non-null values
statuses_count     3595  non-null values
stem_key_flag      3595  non-null values
stem_keys          3595  non-null values
dtypes: bool(1), float64(3), int64(1), object(4)

我正在做的是

en_users_df = users_df[users_df['stem_key_flag']==True]

但我得到的答案与顶部代码块完全相同。这意味着它不过滤任何东西。我是否正在做一些在早期版本中兼容但现在不兼容的事情?如果不是,我犯了什么错误?

我也尝试了对另一列 int 数据类型的类似方法,它工作正常。

fol_cnt_users_df = users_df[users_df['followers_count'] >1000]

In [35]: fol_cnt_users_df
Out[35]: 
<class 'pandas.core.frame.DataFrame'>
Index: 724 entries, 2013-06-20, 12:13:46 to 2013-06-19, 18:26:48
Data columns (total 9 columns):
screen_name        724  non-null values
User_Desc          724  non-null values
lang               724  non-null values
followers_count    724  non-null values
friends_count      722  non-null values
listed_count       714  non-null values
statuses_count     724  non-null values
stem_key_flag      724  non-null values
stem_keys          724  non-null values
dtypes: bool(1), float64(3), int64(1), object(4)

提前感谢您的帮助。

【问题讨论】:

  • 向我们展示users_df.count()en_users_df.count() 的输出。如果它们相等(即,您没有过滤任何内容),那么我强烈怀疑每一行的 lang 是'en'。如果不是,请给出一个反例行。
  • dan,我稍微编辑了这个问题。而不是字段是 lang,现在我想查看类型为 bool 的字段。
  • 好的,现在您正在考虑不同的列,但我有同样的问题:您确定不是stem_key_flag 的所有条目都是True?你能举个反例吗? pandas 肯定仍然支持这种用法。
  • ' 在 [44] 中:users_df['stem_key_flag'] dt_time 2013-06-20, 12:13:46 False 2013-06-20, 14:41:23 True '
  • 另外,我实际上想出了解决方案。如果我使用 ==1 而不是 True,它会起作用。但是谢谢你的谈话。我很感激

标签: python-2.7 dataframe pandas filtering


【解决方案1】:

您的问题可能是版本问题(我假设您使用的是0.100.11)。我已经测试了您的代码,如果 stem_key_flag 列包含任何 False 值,那么它应该返回一个不同的数据框。但是,由于该线程变得适度流行,为了将来的访问者,我想声明您的过滤行(如下所述)是正确的:

en_users_df = users_df[users_df['stem_key_flag']==True]

尽管如此,您将使用更简单的行获得相同的结果,例如

en_users_df = users_df[users_df.stem_key_flag]

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 2019-04-29
    • 2022-12-04
    • 2021-12-10
    • 1970-01-01
    • 2019-06-15
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多