一行中的零除法导致所有其他行中的错误 Pandas
Zero Division in one row causing error in all other rows 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']
此尝试按预期引发 'float division by zero' 错误,因为第一行中的计算是除以零。看到了这个然后做了这个来临时浏览:
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 行开始,结果列应该生成不只是零的浮点值。我还在上面的尝试中插入了“一些错误”,除了结果列中的所有值都显示“一些错误”。
我不知道为什么 pandas 没有绕过错误并在适当的行中产生有效结果。
试试这个 -
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
考虑这个 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']
此尝试按预期引发 'float division by zero' 错误,因为第一行中的计算是除以零。看到了这个然后做了这个来临时浏览:
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 行开始,结果列应该生成不只是零的浮点值。我还在上面的尝试中插入了“一些错误”,除了结果列中的所有值都显示“一些错误”。
我不知道为什么 pandas 没有绕过错误并在适当的行中产生有效结果。
试试这个 -
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