将 If 语句与 Python 中的字符串值一起使用

Using If statement with string values in Python

我有一个 df,其中 A 列为空白或其中有一个字符串。我尝试在下面编写 if 语句(所有列都是字符串)。基本上,如果 df[A] 中有某些东西(任何值),那么新的列值将是列 A、B 和 C 的串联。如果 df[A] 中没有值,那么它将串联 B 列和 C.

idf df[A] returns 是真值还是假值的部分,对吧?就像我要写 bool(df[A]) 一样。所以如果值为真,那么它应该执行第一个块,如果不是,那么它应该执行 'else' 块。

if df[A]:
     df[new_column] = df[column_A] + df[column_B] + df[column_C]
else: 
     df[new_column] = df[column_B]+df[column_C]

我收到这个错误: Series 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

发生这种情况是因为 df['A'] return 是一个 Series 的对象,并且具有某些信息的对象永远不会像 [0,0,0] 或 [[=19] 那样是假的=]] 所以如果它是对象,它总是 return true。 pandas 系列不允许您将其作为布尔值进行比较,因为它不明确

所以试试这个:

if df[A].any():
     df[new_column] = df[column_A] + df[column_B] + df[column_C]
else: 
     df[new_column] = df[column_B]+df[column_C]

此代码的作用是 return如果整列中存在任何值,则为真。如果您需要列中的所有元素都为真,则可以使用 df[A].all()。

据我了解你的问题,你想对每个元素执行 IF 条件。 “+”似乎是字符串连接,因为 df['A'].

中有字符串

在这种情况下,您根本不需要 IF 条件,因为将空字符串添加到另一个会导致与不添加字符串相同的结果。

import pandas as pd

d = {'A': ['Mr ', '', 'Mrs '], 'B': ['Max ', 'John ', 'Marie '], 'C': ['Power', 'Doe', 'Curie']}
df = pd.DataFrame(data=d)

df['new'] = df['A'] + df['B'] + df['C']

结果:

>>> df
      A       B      C              new
0   Mr     Max   Power     Mr Max Power
1         John     Doe         John Doe
2  Mrs   Marie   Curie  Mrs Marie Curie

如果“空白”指的是 NaN 而不是空字符串,您可以执行以下操作:

df['new'] = df.apply(lambda x: ''.join(x.dropna().astype(str)), axis=1)

看看这个问题,好像是这样的: