Pandas中避免除以零问题:将inf替换为0的实现方法
解决DataFrame中除数为0生成inf的问题
针对你提供的代码:
df = pd.DataFrame({f'Diff (a - b)': c['a'] - c['b'], 'Diff in %': (c['a'] - c['b']) * 100 / c['a']})
当c['a']包含0值时,除法运算会产生inf,可以通过以下两种方式解决,将c['a']=0时的百分比结果替换为0:
方法一:提前判断避免生成inf
使用numpy.where在计算时直接判断,当c['a']为0时返回0,否则执行百分比计算:
import numpy as np import pandas as pd df = pd.DataFrame({ f'Diff (a - b)': c['a'] - c['b'], 'Diff in %': np.where(c['a'] == 0, 0, (c['a'] - c['b']) * 100 / c['a']) })
方法二:替换已生成的inf
先执行原计算,再将结果中的inf替换为0:
import numpy as np import pandas as pd df = pd.DataFrame({ f'Diff (a - b)': c['a'] - c['b'], 'Diff in %': (c['a'] - c['b']) * 100 / c['a'] }) df['Diff in %'] = df['Diff in %'].replace(np.inf, 0)
两种方法各有优势:方法一从源头避免inf生成,效率更高;方法二操作直观,适合处理已有包含inf的数据集。
内容的提问来源于stack exchange,提问作者Rustam Karimov
相关产品推荐
相关产品推荐

