我在A列中具有空值(nan),并且当A列中同一行的单元格为空时,希望为B列中的单元格分配0。
列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会将它们视为真实的空值。
您有什么建议?
答案 0 :(得分:1)
您应该avoid pd.Series.apply
wherever possible。也就是说,对于条件赋值,可以通过布尔级数进行选择。
您可以使用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)