用python比较两个字符串

2024-06-09 09:51:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试比较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

有没有办法解决这个问题

坦斯克


Tags: and字符串in类型dataframedfmodelif
3条回答

MODEL_STANDARD_df['FT']== "4"MODEL_STANDARD_df['FT_CODE'] == ' '的返回值是布尔级数,不能在Series上使用and。您可以使用布尔索引,如:

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具有相同的逻辑,这意味着如果全部为真,则为真,因此两个布尔级数的&

0    False
1     True
2    False
3     True
4    False
dtype: bool

Boolean indexing表示只选择真正的行

您可以在数据帧中使用apply函数。见下例:

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)

`

您必须从序列中提取值,以创建一个布尔掩码,该掩码指示使用 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"

相关问题 更多 >