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

时间:2015-01-05 20:21:09

标签: 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))

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

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))

档案“”,第1行

1 d ==2
  ^

SyntaxError:语法无效

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

2 个答案:

答案 0 :(得分:5)

query使用pandas.evaldocumented为"将Python表达式评估为字符串"。您的查询不是有效的Python表达式,因为1d在Python中不是有效的语法,因此您无法使用query以此方式引用此列。

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

答案 1 :(得分:-1)

您始终可以获取列名称列表,这些列名称将列作为字符串返回,然后查询它们。

data = {'ab': [1,2,3], 'c1': [1,2,3], 'd': [1,2,3], 'e_f': [1,2,3]}
df = pd.DataFrame(data)
cols = list(df)

例如,cols[0]'ab'cols[2]'1d'