在我的Dataframe中,有一个名为“Gold”的列和一个名为“Gold.1”的列。
我可以说:
df.query('Gold >= 1')
但是当我说:
df.query('Gold.1 >= 1')
我收到错误消息:
Gold .1 >=1
^
SyntaxError: invalid syntax
这可能是因为列名不是有效的Python标识符。我该如何运行此查询?
答案 0 :(得分:1)
以下解决方法如何:
In [50]: df
Out[50]:
Gold Gold.1
0 0.214436 -2.677897
1 -1.179001 0.414095
2 -0.574168 -0.594181
3 0.091198 0.526241
4 -0.035557 -2.543000
5 -1.760054 1.113350
6 -0.195420 -0.451129
7 -0.016121 -0.231368
8 0.596189 0.410589
9 -0.499686 0.320909
In [51]: qry = 'Gold.1 >= 1'
In [53]: df.rename(columns=lambda x: x.replace('.', '__')) \
.query(qry.replace('.', '__')) \
.rename(columns=lambda x: x.replace('__','.'))
Out[53]:
Gold Gold.1
5 -1.760054 1.11335
说明:
重命名' Col.Suf'到了Col__Suf'
In [56]: df.rename(columns=lambda x: x.replace('.', '__'))
Out[56]:
Gold Gold__1
0 0.214436 -2.677897
1 -1.179001 0.414095
2 -0.574168 -0.594181
3 0.091198 0.526241
4 -0.035557 -2.543000
5 -1.760054 1.113350
6 -0.195420 -0.451129
7 -0.016121 -0.231368
8 0.596189 0.410589
9 -0.499686 0.320909
在查询中进行相同的替换
In [57]: df.rename(columns=lambda x: x.replace('.', '__')).query(qry.replace('.', '__'))
Out[57]:
Gold Gold__1
5 -1.760054 1.11335
答案 1 :(得分:0)
请尝试以下内容:' Gold.1'作为单个有效列名称:
df[df['Gold.1'] >= 1]
示例:
from numpy.random import randn
from pandas import DataFrame
df = DataFrame(randn(10, 2), columns=['Gold','Gold.1'])
df[df['Gold.1'] >= 1]
| Gold | Gold.1
---------------------------------
2 | -1.371181 | 1.126188
3 | 0.379097 | 1.345582
5 | -2.390853 | 2.157693
7 | 1.365850 | 1.098555
或更复杂的查询:
df[df['Gold'] > df['Gold.1']]
| Gold | Gold.1
---------------------------------
0 | -0.146086 | -0.403966
7 | 1.365850 | 1.098555
9 | 1.154098 | 0.738376