我有一個 df,其中 A 列是空白或其中有一個字串。我嘗試在下面撰寫 if 陳述句(所有列都是字串)。基本上,如果 df[A] 中有東西(任何值),那么新的列值將是 A、B 和 C 列的串聯。如果 df[A] 中沒有值,那么它將串聯 B 列和 C。
idf df[A] 的部分回傳真值或假值,對嗎?就像我要寫 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]
我收到此錯誤:系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
uj5u.com熱心網友回復:
據我了解您的問題,您想為每個元素執行 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)
看看這個問題,好像是類似的:questions 33098383
uj5u.com熱心網友回復:
發生這種情況是因為df['A']回傳一個物件,Series并且具有某些資訊的物件永遠不會像 [0,0,0] 或 [None] 那樣為假,因此如果它是物件,它將始終回傳真。熊貓系列不允許您將其作為布林值進行比較,因為它不明確
所以試試這個:
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]
此代碼的作用是,如果整列中存在任何值,則回傳 true。如果您需要列中的所有元素都為真,您可以使用 df[A].all()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397252.html
上一篇:Python迭代嵌套串列字典
