[英]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.