Python 查询函数不使用列名中的空格

Python 查询函数不使用列名中的空格,python,sql,pandas,dataframe,Python,Sql,Pandas,Dataframe,我有一个列名称中带有空格的数据框。我正在尝试使用query方法来获得结果。“c”列工作正常,但“a b”出现错误 import pandas as pd a = pd.DataFrame(columns=["a b", "c"]) a["a b"] = [1,2,3,4] a["c"] = [5,6,7,8] a.query('a b==5') 为此,我得到以下错误: a b ==5 ^ SyntaxError: invalid syntax 我不想用其他字符来填充空格,比如“u”等等

我有一个列名称中带有空格的数据框。我正在尝试使用
query
方法来获得结果。“c”列工作正常,但“a b”出现错误

import pandas as pd
a = pd.DataFrame(columns=["a b", "c"])
a["a b"] = [1,2,3,4]
a["c"] = [5,6,7,8]
a.query('a b==5')
为此,我得到以下错误:

a b ==5
  ^
SyntaxError: invalid syntax
我不想用其他字符来填充空格,比如“u”等等

有一种黑客使用pandasql将变量名放在括号内,例如:[ab]

Pandas 0.25+ 如上所述:

DataFrame.query()
DataFrame.eval()
现在支持引用列 带反勾号的名称指带有空格()

因此,您可以使用:

a.query('`a b`==5')
熊猫0.25之前 如果列名中有空格,则不能使用
pd.DataFrame.query
。考虑如果您有列为“代码> > ,<代码> B和<代码> B < /代码>会发生什么;你所需要的东西会模棱两可

相反,您可以使用
pd.DataFrame.loc

df = df.loc[df['a b'] == 5]
由于您只筛选行,因此可以完全忽略
.loc
访问器:

df = df[df['a b'] == 5]

这还不可能。检查:

请注意,实际上,.query只是一个很好的接口,实际上它有非常具体的保证,这意味着它要像查询语言一样进行解析,而不是一个完全通用的接口

原因是
query
需要字符串是有效的python表达式,所以列名必须是有效的python标识符

解决办法是:


在本例中,我不使用pandas.query函数,而是创建一个条件来查找值以及条件为True的位置。例如:

将熊猫作为pd导入
a=pd.DataFrame(列=[“ab”,“c”])
a[“ab”]=[1,2,3,5]
a[“c”]=[5,6,7,8]
#a、 query('ab==5')删除该查询,因为它无法查找名称中带有空格的列。
条件=a['a b']==5
打印(a['a b'][条件])

我们看到,在索引3处,您的条件的计算结果为True(如果您想要特定的索引,而不是一系列布尔值)

恐怕查询方法不接受带有空格的列名。在任何情况下,都可以通过以下方式查询数据帧:

import pandas as pd
a = pd.DataFrame({'a b':[1,2,3,4], 'c':[5,6,7,8]})
a[a['a b']==1]

从pandas
0.25
开始,您将能够使用反勾号转义列名,以便执行以下操作

a.query(''ab`==5')

简单易用,很好的解决方案。谢谢此外,如果列具有字符串编号“1”,则需要“`:a.query(“`1`==5”)
output:

    3    5
import pandas as pd
a = pd.DataFrame({'a b':[1,2,3,4], 'c':[5,6,7,8]})
a[a['a b']==1]