2017-03-05 36 views
2

在我的Dataframe中,有一個名爲「Gold」的列和一個名爲「Gold.1」的列。帶有非標準列名的數據幀查詢

我可以說:

df.query('Gold >= 1') 

但是,當我說:

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

我得到一個錯誤信息:

Gold .1 >=1 
    ^
SyntaxError: invalid syntax  

這可能是因爲該列名不是有效的Python標識符。我怎樣才能運行這個查詢?

+2

相同的替換現在看來它不是[執行]( https://github.com/pandas-dev/pandas/issues/6508) – jezrael

回答

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