首页 > 解决方案 > 一行中的零除法导致所有其他行中的错误 Pandas

问题描述

考虑到这个df的两列:

    ColA        ColB    
0   0.0         0.0     
1   5.523288    0.0     
2   6.115068    0.0     
3   6.90411     1.0     
4   9.172603    2.0     
5   10.849315   2.0     
6   12.230137   0.0     
7   11.210959   0.0     
8   10.849315   1.0     
9   2.169863    0.0     

尝试以这种方式生成计算列:

df['Result'] = df['ColB']/df['ColA']

由于第一行中的计算是除以零,因此此尝试会按预期引发“浮点除以零”错误。看到了这个,然后做了这个暂时导航:

try:
     df['Result'] = df['ColB']/df['ColA']
except ZeroDivisionError:
     df['Result'] = 0

但是,此代码始终产生此结果(即所有行都为零)

        ColA        ColB   Result    
    0   0.0         0.0     0
    1   5.523288    0.0     0
    2   6.115068    0.0     0
    3   6.90411     1.0     0
    4   9.172603    2.0     0
    5   10.849315   2.0     0
    6   12.230137   0.0     0
    7   11.210959   0.0     0
    8   10.849315   1.0     0
    9   2.169863    0.0     0

从索引第 3 行开始,Result 列应该产生不仅仅是零的浮点值。我还在上面的尝试中插入了“一些错误”,除了结果列中的所有值都显示“一些错误”。

我不知道为什么 pandas 没有绕过错误并在适当的行中产生有效结果。

标签: pythonpandaserror-handling

解决方案


尝试这个 -

df['Result'] = (df['ColB']/df['ColA']).fillna(0)
        ColA  ColB    Result
0   0.000000   0.0  0.000000
1   5.523288   0.0  0.000000
2   6.115068   0.0  0.000000
3   6.904110   1.0  0.144841
4   9.172603   2.0  0.218041
5  10.849315   2.0  0.184343
6  12.230137   0.0  0.000000
7  11.210959   0.0  0.000000
8  10.849315   1.0  0.092172
9   2.169863   0.0  0.000000

在此处查看文档


关于这一点——

try:
     df['Result'] = df['ColB']/df['ColA']
except ZeroDivisionError:
     df['Result'] = 0

我实际上无法重现您面临的结果。这是我所期望的。

        ColA  ColB    Result
0   0.000000   0.0       NaN #<- 0/0 still throws nan
1   5.523288   0.0  0.000000 #<- divide by 0 
2   6.115068   0.0  0.000000
3   6.904110   1.0  0.144841
4   9.172603   2.0  0.218041
5  10.849315   2.0  0.184343
6  12.230137   0.0  0.000000 #<- divide by 0
7  11.210959   0.0  0.000000
8  10.849315   1.0  0.092172
9   2.169863   0.0  0.000000

推荐阅读