簡體   English   中英

比較兩個字符串與 python pandas

[英]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.

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