[英]compare two strings with python pandas
我嘗試比較 dataframe 中的兩列(字符串類型):
if((MODEL_STANDARD_df['FT']== "4") and (MODEL_STANDARD_df['FT_CODE'] == ' ')):
MODEL_STANDARD_df['ft2'] = "DIESEL"
但我收到此錯誤:
Error in Python process: At line 18: <type 'exceptions.ValueError'>:
The truth value of a Series is ambiguous. Use a.empty, a.bool(),
a.item(), a.any() or a.all(). More info about this error
有什么想法可以解決這個問題嗎?
坦斯克
您必須從系列中提取值以創建 boolean 掩碼,使用 numpy 的logical_and
方法指示兩列中條件同時為真的位置:
import numpy as np
MODEL_STANDARD_df.loc[np.logical_and(MODEL_STANDARD_df['FT'].values=="4",MODEL_STANDARD_df['FT_CODE'].values==' '), 'ft2'] = "DIESEL"
MODEL_STANDARD_df['FT']== "4"
和MODEL_STANDARD_df['FT_CODE'] == ' '
返回值為 boolean 系列,不能在Series
上使用and
。 您可以使用 boolean 索引,如:
MODEL_STANDARD_df['ft2'] = ""
MODEL_STANDARD_df.loc[ (MODEL_STANDARD_df['FT']== "4") & (MODEL_STANDARD_df['FT_CODE'] == ' '), 'ft2'] = "DIESEL"
下面以dataframe為例
FT FT_CODE
4 3
4 ' '
4 2
4 ' '
5 ' '
(MODEL_STANDARD_df['FT']== "4")
返回
0 True
1 True
2 True
3 True
4 False
Name: FT, dtype: bool
MODEL_STANDARD_df['FT_CODE'] == ' '
返回
0 False
1 True
2 False
3 True
4 True
Name: FT_CODE, dtype: bool
&
and
相同的邏輯,這意味着如果所有 True 則 True,因此兩個 boolean 系列的&
是
0 False
1 True
2 False
3 True
4 False
dtype: bool
Boolean 索引意味着僅選擇 True 行。
您可以沿 dataframe 使用應用 function。 請參見下面的示例:
MODEL_STANDARD_df = pd.DataFrame({'FT': ["4", "1", "3"], "FT_CODE": [' ', '1', '4']})
MODEL_STANDARD_df['ft2'] = MODEL_STANDARD_df.apply(lambda x: "DIESEL" if x.FT == "4" and x.FT_CODE == " " else None, axis=1)
`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.