2017-06-30 94 views
1

很簡單的問題,嘗試了幾件事情,沒有運氣。用兩個條件過濾一個數據框熊貓python

我試圖隔離出生日期落在特定時間間隔的顧客的年齡範圍。

youth = cd.loc[cd.yearofbirth.isin([1996, 1997 1998, 1999]), "SALES"] 

工作正常不過,一些其他的間隔較大(即包括30年以上),我不希望他們全部寫出來的,而是做一個小於或等於比一個更或者等於。即

youth = cd.loc[cd.yearofbirth >= 1996 | cd.yearofbirth <= 1999, "SALES"] 

,但此行的代碼給了我一個錯誤

TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool] 

單不平等工作正常,但它這使得它的錯誤它與第二組合時。

非常感謝!

回答

3

您需要使用括號來分隔布爾條件。 此外,它看起來像你需要的條件的交集(&),而不是聯盟(|):

youth = cd.loc[(cd.yearofbirth >= 1996) & (cd.birth_year <= 1999), "SALES"] 

這是因爲在Python |(或&)具有precedence超過>=,這說明你的錯誤。

這也報道documentation

另一種常見的操作是使用布爾矢量來篩選 數據。運營商是:|爲或,&爲,而〜爲不。這些 必須使用括號進行分組。

最後,對於這種特定的情況下,你可能不需要多個條件可言,因爲你可以使用between方法:

youth = cd.loc[cd.yearofbirth.between(1996, 1999), "SALES"] 
+0

感謝。然而,一個問題是,雖然不再錯誤,但它並不像我想的那樣工作。它返回大於1996的所有條目以及小於1999的所有條目,而不是僅在間隔之間的那些條目。任何建議來修改這個? – mystifier

+0

我想你想使用AND條件(&)而不是OR(|),因爲你想要交點 – FLab

+0

完美,歡呼 – mystifier

相關問題