簡體   English   中英

為什么我會收到 ValueError:Series 的真值不明確?

[英]Why am I getting a ValueError: The truth value of a Series is ambiguous?

我知道之前有人問過類似的問題,但我很難理解為什么會出現這個錯誤。

我正在使用下面的代碼創建一個新列,如果“價格”在上限“price_h2”和下限“price_h1”之內,則該行被標記為異常值

df_test['price_outlier'] = np.where( df_test['price_h1'] <= df_test['price'] <= df_test['price_h2'],'normal','outlier')

非常感謝幫助!

因為 numpy arrays 不支持語法: a < x < b

您需要使用括號來分隔兩個子句(a < x) & (x < b)

df_test['price_outlier'] = np.where((df_test['price_h1'] <= df_test['price']) &\
                                    (df_test['price'] <= df_test['price_h2']), 
                                    'normal', 'outlier')

這樣做的原因是,如果您嘗試在多元素 boolean 系列上廣播操作,pandas 選擇拋出錯誤,因為對於行為應該是什么本質上是模棱兩可的。

pandas 遵循 NumPy 約定,當您嘗試將某些內容轉換為布爾值時會引發錯誤。 這發生在 if 語句中或使用 boolean 操作時:and、or、and not。 不清楚以下代碼的結果應該是什么:

有關此行為的更多信息,請參閱pandas 文檔

至於如何讓你想要的行為發揮作用; 請記住,您可以使用許多不同的數據類型(列表、字典、ndarray 等)將列分配給 dataframe。 因此,一種避免系列比較問題的簡單方法是使用列表推導。

df_test['price_outlier'] = [a <= b <= c for a, b, c in zip(df_test['price_h1'], df_test['price'], df_test['price_h2'])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM