熊猫数据框除以非零除时返回“ inf”

时间:2018-07-18 20:25:06

标签: python pandas

当我尝试通过将现有列除以另一个现有列在熊猫数据框中创建新列时,我在没有除以零的行中得到“ inf”。

claims_report['% COST DIFFERENCE'] = 100*claims_report['COST DIFFERENCE']/claims_data['ORIGINAL UNIT COST']
print(claims_report[['ORIGINAL UNIT COST','COST DIFFERENCE','% COST DIFFERENCE']].head(9))

以上代码的结果为:

   ORIGINAL UNIT COST  COST DIFFERENCE  % COST DIFFERENCE
0              4.3732          11.2500         257.248697
1              3.7935          22.0000         579.939370
2              6.9167          22.0000         318.070756
3              1.1429           4.5000         393.735235
4              0.0000           7.3269                inf
5              7.3269          -0.8622         -11.767596
6              6.4647           0.7853          12.147509
7              0.2590           0.0170           6.563707
8             14.4471         -12.7145               -inf

根据我的计算,第8行中不应包含-inf。作为检查,我运行了以下代码:

for i in range(9):
print(i, claims_report['COST DIFFERENCE'][i], claims_report['ORIGINAL UNIT COST'][i], claims_report['COST DIFFERENCE'][i]/claims_report['ORIGINAL UNIT COST'][i])

哪个在第8行给了我预期的结果:

0 11.25 4.3732 2.5724869660660388 
1 22.0 3.7935 5.799393699749571 
2 22.0 6.9167 3.180707562855119 
3 4.5 1.1429 3.937352349286902 
4 7.3269 0.0 inf 
5 -0.8622 7.3269 -0.11767596118412971 
6 0.7853 6.4647 0.1214750877844293 
7 0.017 0.259 0.06563706563706564 
8 -12.7145 14.4471 -0.880072817382035

是否熟悉这种类型的问题?

2 个答案:

答案 0 :(得分:1)

在第一行

claims_report['% COST DIFFERENCE'] = 100*claims_report['COST DIFFERENCE']/claims_data['ORIGINAL UNIT COST']

您不是说“ claims_report”而不是“ claims_data”吗?也许您只是选择了错误的数据框?

答案 1 :(得分:0)

将来的另一种解决方法可能是:

import pandas as pd
pd.set_option('use_inf_as_na', True)

会将pandas数据框中的所有值从'inf'设置为'nan'。然后,您可以像这样使用fillna方法:

df = df.fillna(value=0, inplace=True)