【问题标题】:Modifying cell in column B if cell in column A is null如果 A 列中的单元格为空,则修改 B 列中的单元格
【发布时间】:2019-02-04 15:21:13
【问题描述】:

我在 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

我的 null 值显示为“nan”(不是“None”或“Nan”),所以我什至不确定 Python 是否将它们视为真正的 null 值。

你有什么建议?

【问题讨论】:

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


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多