Pandas 当列名以数字开头时查询抛出错误

Pandas query throws error when column name starts with a number

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

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
  ^

语法错误:语法无效

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

querypandas.eval,也就是documented到"evaluate a Python expression as a string"。您的查询不是有效的 Python 表达式,因为 1d 不是 Python 中的有效语法,因此您不能使用 query 那样引用此列。

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

您总是可以获得列名称的列表,其中 returns 列作为字符串,然后查询它们。

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'