【问题标题】:Dividing data-frame columns and getting ZeroDivisionError: float division by zero划分数据框列并获得 ZeroDivisionError: float 除以零
【发布时间】:2016-11-27 12:40:10
【问题描述】:

我有一个数据框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

【问题讨论】:

  • 可能是浮动 pt 问题。修复可能正在使用:np.isclose(dayData.average_power,0).
  • 谢谢,我试过 dayData["second_step_power"] = np.where(np.isclose(dayData.average_power,0), 0, dayData.first_power/dayData.average_power) 但遇到了同样的问题

标签: python pandas


【解决方案1】:

您最初可以将所有值设置为零,然后创建一个掩码来定位具有有效分母的所有行,即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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多