繁体   English   中英

Python Pandas:如何过滤存储在不同变量中的多个表达式的数据帧?

[英]Python Pandas: How to filter a dataframe with more than one expression stored in different variables?

我正在构建一个多用途的用户界面,我正在为它添加Pandas。 为此,我需要按用户选择定义的组件(存储在变量中)形成表达式。

一切似乎都很好,但我陷入了死胡同。 我希望用户能够选择几个表达式,然后将它们连接起来以形成新的数据帧。 如果我只使用一个表达式,一切都会起作用:

from pandas import read_csv
df = read_csv("SomeCsv.csv")
b= df[r'ID']
a=(b==r'p')
Value=df[a] #Works,returning the rows in df whichs column 'ID' equals r'p'

但是如果我想要包含更多表达式:

from pandas import read_csv
df = read_csv("SomeCsv.csv")
b= df[r'ID']
c=(b==r'p')
d=(b==r'ul')
a=c or d  #Breaks at this line
Value=df[a] #Doesnt work. I would expect the rows in df whichs column 'ID' equals r'p' or 'ID' equals r'ul'

并抛出以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

在询问之前,我尝试了所有可以想到的表达式的.any和.all组合,并且所有这些组合都失败了。

如何通过匹配存储在变量中的多个表达式的列来过滤此数据帧?

作为numpy的新手,我也有点挣扎(没有双关语)。 我相信你想要这样的东西:

>>> df[(df['ID'] == 'p') | (df['ID'] == 'ul')]

表达式必须求值为布尔值(并且这些术语必须通过按位运算连接),然后用于屏蔽或过滤相应的元素。


也可以看看:

实际上你可以使用@miku回答,但在你的情况下你也可以使用pandas.Series.isin()方法:

>>> df[df['ID'].isin(('p', 'ul'))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM