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
^
语法错误:语法无效
我认为问题与字符串的格式有关。我想知道形成此查询的正确方法是什么。
query
用pandas.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'
。
我正在尝试对以下数据框执行查询:
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
^
语法错误:语法无效
我认为问题与字符串的格式有关。我想知道形成此查询的正确方法是什么。
query
用pandas.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'
。