我有一个数据框dayData,其中包括具有以下类型的列'ratio''first_power'列:

Name: ratio, dtype: float64 first power
Name: first_power, dtype: object average power

  ratio   average_power
0     5            8.0
1     6            4.0
2     7            0.0
3     0            6.0
4     8            5.0
5     9            4.0
6     8            2.0
7     7            8.0
8     6            0.0
9     5            5.0
10    8            4.0


我的过程的下一步是使用以下公式将2列除以创建第二步幂:

dayData["second_step_power"] = np.where(dayData.average_power == 0.0, 0, dayData.first_power/dayData.average_power)


显然,您无法将其除以零,因此,如果average_power为零,我正在尝试将second_step_power设置为0,但是出现错误:

ZeroDivisionError: float division by zero


有人可以让我知道处理零的正确方法,所以代码

我理想的输出是:

  ratio   average_power   second_step_power
0     5            8.0                0.625
1     6            4.0                1.500
2     7            0.0                0.000
3     0            6.0                0.000
4     8            5.0                1.600
5     9            4.0                2.250
6     8            2.0                4.000
7     7            8.0                0.875
8     6            0.0                0.000
9     5            5.0                1.000
10    8            4.0                2.000


谢谢

最佳答案

您可以首先将所有值设置为零,然后创建一个掩码,以有效的分母(即power大于零(gt(0)))定位所有行。最后,将掩码与loc一起使用以计算second_step_power

df['second_step_power'] = 0
mask = df.average_power.gt(0)
df.loc[mask, 'second_step_power'] = \
    df.loc[mask, 'first_power'] / df.loc[mask, 'average_power']

关于python - 划分数据帧列并得到ZeroDivisionError:浮点除以零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38546275/

10-12 20:59