【发布时间】:2017-09-11 20:47:37
【问题描述】:
我有一个数据框“df”,其中包含“Call_ID”列,其中一个值为“888”。我有以下变量:
c = 'Call_ID'
v = '888'
q = 'df[c] == v'
df[df[c] == v] 工作正常。但是,df[q] 给了我关键错误。有什么建议吗?
【问题讨论】:
我有一个数据框“df”,其中包含“Call_ID”列,其中一个值为“888”。我有以下变量:
c = 'Call_ID'
v = '888'
q = 'df[c] == v'
df[df[c] == v] 工作正常。但是,df[q] 给了我关键错误。有什么建议吗?
【问题讨论】:
df[q] 正在寻找名为'df[c] == v' 的列。它不等同于df[c] == v,因为第一个是字符串,第二个是 Python 表达式。
【讨论】:
布尔索引不支持字符串表达式,也不计算它们。你需要 query 代替:
df.query('Call_ID == @v')
或者,
df.query('{} == "{}"'.format(c, v))
df
a b c
0 1 1 a
1 1 2 b
2 1 3 c
6 2 1 d
7 2 2 e
9 2 2 x
10 2 1 x
df.query("c == 'x'")
a b c
9 2 2 x
10 2 1 x
【讨论】:
df.query('{} == "{}"'.format(c, v)) 给我语法错误
df.query(df.eval(my_exp)) 时,它终于起作用了。谢谢你的帮助:)