首页 > 解决方案 > Pandas 使用索引将行值替换为零

问题描述

我需要从一个数据帧“df”(未显示)应用索引,条件是真/假,df 中的行值是否包含 NaN。我发现该索引被称为“rowswithnan”,如下所示是一个系列。我需要使用此索引将不同数据帧“df2”的行值设置为零 (0)。我已经尝试了很多事情并且遇到了不同的错误。

系列 rowswithnan 索引如下所示:

0   False
1   True
2   True
3   False

和 df2 看起来像这样:

   plant_name  power_kwh  hour  day  month  year
0  AREC        32963.4    23   31     12    2020
1  AREC        35328.2    22   31     12    2020
2  AREC        37523.6    21   31     12    2020
3  AREC        36446.0    20   31     12    2020

使用“rowswithnan”的索引后,我需要 df2 在“power_kwh”列中使用“零”替换看起来像这样:

df2

   plant_name  power_kwh  hour  day  month  year
0  AREC        32963.4    23   31     12    2020
1  AREC        0          22   31     12    2020
2  AREC        0          21   31     12    2020
3  AREC        36446.0    20   31     12    2020

谢谢你。

标签: pandasindexingrows

解决方案


由于您有一系列描述 NaN 在数据框中的位置,我猜有一种更简单的方法来处理整个情况。rowswithnan但是,这是对您在评论中删除系列索引为 False的行的请求的回答。

首先将该系列作为数据框的一列:

df['contains_nan'] = `rowswithnan`

然后使用布尔过滤:

df = df.loc[~df.contains_nan]

要将值power_kwh设置为零而不是删除行,请执行以下操作:

df.loc[df.contains_nan, 'power_kwh'] = 0

推荐阅读