用python比较两个字符串

用python比较两个字符串,python,pandas,string,Python,Pandas,String,我尝试比较dataframe中的两列字符串类型 : 但我得到了这个错误: 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 有没有办法解决这个问题

我尝试比较dataframe中的两列字符串类型 :

但我得到了这个错误:

 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
有没有办法解决这个问题


Thansk

您必须从序列中提取值,以创建一个布尔掩码,指示条件在两列中同时为真的位置,使用 numpy的逻辑单元和方法:

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

型号标准df['ft2']= 型号标准测向。loc[型号标准测向['FT']==4和型号标准测向['FT']=='','ft2']=柴油机 以下面的dataframe为例

FT    FT_CODE
4       3
4      ' '
4       2
4      ' '
5      ' '
模型_标准_df['FT']==4返回

MODEL_STANDARD_df['FT_CODE']==''返回

&与and具有相同的逻辑,这意味着如果两个布尔级数的and全部为真,则so为真

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

意味着只选择真正的行。

您可以在数据帧中使用应用功能。见下例:

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)

`

您是否尝试使用错误消息进行搜索-序列的真值不明确。使用a.empty、a.bool、a.item、a.any或a.all。?这些结果有帮助吗?如果这些结果中的任何一个回答了您的问题,请告诉我们哪一个结果,我们会将您的结果标记为重复。这是否回答了您的问题?它不创建列ft2@butter在布尔索引之前添加MODEL_STANDARD_df['ft2']=怎么样?我不接受所有3种解决方案,结果得到一个空列:/@butter FT的列类型是什么?用Primtdf.dType打印它,如果它是int。考虑将列类型转换为与DF[ft]的STR。ASTYPESTR或change=4=4。好,我将类型改为小数。但仍然不能工作同样的问题:空FT2让我看看我是否理解你。您想在datafram中创建第三列,如果FT列为4且FT_代码为空,则第三列将为DIESEL,对吗?和其他行,当条件未达到时的值是多少?从24小时起仍然被阻止:对不起,我没有理解你。谁或什么仍然被阻止?在pandas中,不能将数据帧列(即pd.Series)求值为单个值。您可以使用.loc来检查在数据帧中达到条件的位置,也可以使用apply来为数据帧中的每一行或每一列执行函数。如果你的问题是关于这个,请告诉我。
0     True
1     True
2     True
3     True
4    False
Name: FT, dtype: bool
0    False
1     True
2    False
3     True
4     True
Name: FT_CODE, dtype: bool
0    False
1     True
2    False
3     True
4    False
dtype: bool
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)