当列名以数字开头时,Pandas查询会引发错误

ran*_*ana 2 python pandas

我正在尝试对以下数据帧执行查询:

data = {'ab': [1,2,3], 'c1': [1,2,3], 'd': [1,2,3], 'e_f': [1,2,3]}
df = pd.DataFrame(data)
for cl in df.columns:
    print len(df.query('%s==2' %cl))
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,如果列名以数字开头,则会引发语法错误.

data = {'ab': [1,2,3], 'c1': [1,2,3], '1d': [1,2,3], 'e_f': [1,2,3]}
df = pd.DataFrame(data)
for cl in df.columns:
    print len(df.query('%s==2' %cl))
Run Code Online (Sandbox Code Playgroud)

文件"",第1行

1 d ==2
  ^
Run Code Online (Sandbox Code Playgroud)

SyntaxError:语法无效

我认为问题与字符串的格式有关.我想知道形成这个查询的正确方法是什么.

Bre*_*arn 5

queryuses pandas.eval,记录为"将Python表达式计算为字符串".您的查询不是有效的Python表达式,因为1d它在Python中不是有效的语法,因此您不能用query这种方式引用此列.

如果确保所有列都是有效的Python标识符,那么pandas中的内容通常会更容易.