2017-02-24 6 views
1

私は、次のデータフレームを持っている:返された何戻りサブセット

import pandas as pd 

# create simple dataset of people 
data = {'Name': ["John", "Anna", "Peter", "Linda"], 
     'Location': ["New York", "Paris", "Berlin", "London"], 
     'Age': [24, 13, 53, 33] 
     } 
data_pandas = pd.DataFrame(data) 
# IPython.display allows "pretty printing" of dataframes 
# in the Jupyter notebook 
#display(data_pandas) 
data_pandas 

は、次のDFです:

Age Location Name 
0 24 New York John 
1 13 Paris  Anna 
2 53 Berlin  Peter 
3 33 London  Linda 

私は、この操作を行います。

olderThan30 = data_pandas[data_pandas > 30] 
olderThan30 

をそして、以下を返します:

Age  Location Name 
0 NaN  New York John 
1 NaN  Paris  Anna 
2 53.0 Berlin  Peter 
3 33.0 London  Linda 

私がしたい何リターンはこのような何か30より大きいAge列を持っているもののみです:私はそれをどのように

Age  Location Name 
2 53.0 Berlin  Peter 
3 33.0 London  Linda 

をしますか?

答えて

1

あなたがマスクに適切なboolean conditionを渡す必要があります理由である、

In [105]: 
data_pandas > 30 

Out[105]: 
    Age Location Name 
0 False  True True 
1 False  True True 
2 True  True True 
3 True  True True 

この後、マスク全体のDFでの細胞:全体のDFを比較したものをあなたがやった

In [104]: 
data_pandas[data_pandas['Age'] > 30] 

Out[104]: 
    Age Location Name 
2 53 Berlin Peter 
3 33 London Linda 

あなたは年齢の最初の2行でNaNを得ます

興味のある列だけをマスキングしていますが:

In [106]: 
data_pandas['Age'] > 30 

Out[106]: 
0 False 
1 False 
2  True 
3  True 
Name: Age, dtype: bool 

DFにマスクとして渡され、マスク行@JonClementsとして

示唆している、あなたはqueryを使用して、より快適に感じることがあります。

In [110]: 
data_pandas.query('Age > 30') 

Out[110]: 
    Age Location Name 
2 53 Berlin Peter 
3 33 London Linda 

これはnumexprライブラリに依存していますこれは通常私の経験で正しくインストールされています

+0

df.queryを使用してnumexprを利用できる場合は、注意する価値があります。 –

+0

@JonClementsが確実に更新されます。私は 'query'をあまり使用しません。 – EdChum

+0

ありがとう!これは私の学習に非常に役立ちました。 – martinbshp