2017-02-24 21 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  Location Name 
2 53.0 Berlin  Peter 
3 33.0 London  Linda 

我該怎麼辦呢?

回答

1

你需要合適的boolean condition傳遞到面膜:

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

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

你做的是比較整個DF:

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,這是爲什麼你得到的前兩排的年齡

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

可能值得注意的是,如果numexpr可用,則使用df.query是一個選項。 –

+0

@JonClements肯定會更新,我沒有'查詢'這麼多 – EdChum

+0

謝謝!這對我的學習非常有幫助。 – martinbshp