如果A列中的单元格为空,则修改B列中的单元格

时间:2019-02-04 15:21:13

标签: python python-3.x pandas dataframe lambda

我在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会将它们视为真实的空值。

您有什么建议?

1 个答案:

答案 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)