【问题标题】:python data frame for fliter用于过滤器的python数据框
【发布时间】:2020-09-21 17:06:35
【问题描述】:

这是我的代码:

def near (msg):
    if df['Event_step'].str.contains('nearmiss'):
        bloon = df['Event_step'].str.contains(msg)   
        filter_data = df[bloon] 
        return 'NearMiss:'+msg,len(filter_data) 
    else:   
        bloon = df['Event_step'].str.contains(msg)   
        filter_data = df[bloon]                                                
        return msg,len(filter_data)

然后,当我运行它时,我得到了:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

我不知道为什么我不能过滤我想要的东西。

【问题讨论】:

  • 你能为你的问题设置一个更好的标题吗?

标签: python pandas


【解决方案1】:

df['Event_step'].str.contains('nearmiss') 返回一个系列。如果需要一个布尔值。使用allany 作为组合。喜欢df['Event_step'].str.contains('nearmiss').all()df['Event_step'].str.contains('nearmiss').any()

【讨论】:

  • 我运行后显示:在处理上述异常过程中,又出现了一个异常:KeyError: False
  • 只需要在 if 子句中更改即可。无处。 if df['Event_step'].str.contains('nearmiss').all():
  • 感谢上帝!这个问题让我困惑了很长时间。现在,它得到了解决。
【解决方案2】:

正如 cmets 中已经说明的那样: contains- 函数返回一个布尔系列,如下所示。

names = {"names":["a","b", "c", "d", "e"]}
df = pd.DataFrame(names)
df.names.str.contains("a")

输出:

True
False
False
False
False

如果您想将此系列 - 对象转换为您习惯使用的标量 - 布尔值,那么您可以在这种情况下使用 any - 函数。

names = {"names":["a","b", "c", "d", "e"]}
df = pd.DataFrame(names)
df.names.str.contains("a").any()

输出:

True

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多