2 回答

TA貢獻1862條經驗 獲得超6個贊
np.where在這種情況下你可以使用:
df['C'] = np.where(df['A']==1, {'example': 5}, df['C'])
輸出:
A B C
0 1 4 {'example': 5}
1 1 5 {'example': 5}
2 1 6 {'example': 5}
3 2 7 NaN
4 2 8 NaN
5 2 9 NaN
由于更新{'example': 5}是一個可迭代的對象,當您將其分配給列時,Pandas 會嘗試展開它,因此如果您直接這樣做,則會出現長度不匹配錯誤。要將整個列分配給該字典,您需要將其包裝在另一個具有相同長度的迭代中df:
df['C'] = [{'example':5} for _ in df.index]
輸出:
A B C
0 1 4 {'example': 5}
1 1 5 {'example': 5}
2 1 6 {'example': 5}
3 2 7 {'example': 5}
4 2 8 {'example': 5}
5 2 9 {'example': 5}
也就是說,除非確實有必要,否則應盡可能避免 Pandas 數據框中的復雜對象。
更新 2:根據 BEN 的評論,也反映在更新中
df['C'] = np.where(df['A']==1, {'example': 5}, df['C'])
可能會將同一對象復制{'example':5}到所有有效行,這可能不是預期的行為。所以對于這樣的事情:
df['C'] = [{'example':5} if a==1 else c for a,c in zip(df['A'], df['C'])]
將為各個行創建不同的副本。{'example':5'}

TA貢獻1859條經驗 獲得超6個贊
您可以使用np.where:
df['C'] = np.where(df['A']==1, {'example': 5}, df['C'])
print(df)
印刷:
A B C
0 1 4 {'example': 5}
1 1 5 {'example': 5}
2 1 6 {'example': 5}
3 2 7 None
4 2 8 None
5 2 9 None
添加回答
舉報