我在 A 列中有空 (nan) 值,并且当 A 列中同一行的单元格为空时,我希望将 0 分配给 B 列中的单元格。
B 列已创建为以下 lambda 表达式:
df['col_B'] = df.apply(lambda x: x.col_A in x.col_C, axis=1)
我尝试修改它,但它不起作用,并且从我读到的内容来看,不建议这样做。
所以我尝试使用经典循环,它没有显示错误,但它不会修改 B 列中的单元格:
for index, row in df.iterrows():
if row['col_A'] is None:
df.at[index, 'col_B'] = 0
我的空值显示为“nan”(不是“None”或“Nan”),所以我什至不确定Python是否将它们视为真正的空值。
你有什么建议?
最佳答案
你应该avoid pd.Series.apply
wherever possible 。也就是说,对于条件赋值,有一些通过 bool 级数的替代方案。
您可以使用loc
:
df.loc[df['col_A'].isnull(), 'col_B'] = 0
或者mask
:
df['col_B'] = df['col_B'].mask(df['col_A'].isnull(), 0)
或者np.where
:
df['col_B'] = np.where(df['col_A'].isnull(), 0, df['col_B'])
如果您的空值是字符串,请确保先替换它们;例如:
df['col_A'] = df['col_A'].replace('Nan', np.nan)
关于python - 如果 A 列中的单元格为空,则修改 B 列中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519230/