2017-03-05 10 views
2

私のデータフレームには、 "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 
関連する問題