具有非标准列名称的数据框查询

时间:2017-03-05 07:46:29

标签: pandas

在我的Dataframe中,有一个名为“Gold”的列和一个名为“Gold.1”的列。

我可以说:

df.query('Gold >= 1')

但是当我说:

df.query('Gold.1 >= 1')

我收到错误消息:

Gold .1 >=1
      ^
SyntaxError: invalid syntax    

这可能是因为列名不是有效的Python标识符。我该如何运行此查询?

2 个答案:

答案 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