我遇到了这样一种情况:我可以在查询字符串中使用列名和字符串文本来查询熊猫数据
import pandas as pd
data = pd.DataFrame([list('aba'),
list('xyz')],
columns=['A', 'B', 'C'])
data.query("A == 'a'")
# A B C
# 0 a b a
data.query("A.eq('a')")
# A B C
# 0 a b a
但是,当我使用变量替换而不是列名时,我会得到错误。
x = 'A'
data.query("@x == 'a'")
# KeyError: 'False: boolean label can not be used without a boolean index'
data.query("@x.eq('a')")
# AttributeError: 'str' object has no attribute 'eq'
到底怎么回事?
发布于 2022-03-25 18:54:11
@
在pandas.eval
中引用的变量应该引用本地命名空间中的变量,而不是DataFrame
中的列。因此,它将以@
为前缀的变量解释为非文字变量。(例如,"@x.eq('a')"
被扩展为"'A'.eq('a')"
,而您想要"A.eq('a')"
)
https://pandas.pydata.org/docs/user_guide/enhancingperf.html#local-variables
如果您想在其中替换列名并让熊猫解析它们,您可以使用字符串格式方法或f-string
。
import pandas as pd
data = pd.DataFrame([list("aba"), list("xyz")], columns=["A", "B", "C"])
x = "A"
data.query(f'{x} == "a"')
A B C
0 a b a
这样,在pandas
获得字符串之前就会对字符串进行内插,并且它可以处理那些引用列的变量。
https://stackoverflow.com/questions/71621772
复制相似问题