我正在尝试对以下数据框执行查询:
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:语法无效
我认为问题与字符串的格式有关。我想知道形成这个查询的正确方法是什么。
答案 0 :(得分:5)
query
使用pandas.eval
,documented为"将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'
。