当我尝试通过将现有列除以另一个现有列在熊猫数据框中创建新列时,我在没有除以零的行中得到“ 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
是否熟悉这种类型的问题?
答案 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)