为了避免除以零,以下逻辑旨在计算百分比变化并跳过前一个月的值为0的值。但是,即使在引用的列中存在有效的非NaN非零数字,以下操作也会将所有百分比更改生成为null。
df_ex['metric_diff'] = (df_ex['metric_lastmonth'] - df_ex['metric_thismonth'])
try:
df_ex['metric_pctdiff'] = (df_ex['metric_lastmonth'] - df_ex['metric_thismonth'])/df_ex['metric_thismonth']
except ZeroDivisionError:
df_ex['metric_pctdiff'] = np.nan
print(len(df_ex[df_ex['metric_diff'].notna()]))
521
print(len(df_ex[df_ex['metric_pctdiff'].notna()]))
0
输出指示存在与非NaN值的标称差异,但是当比较相同的两列时,百分比差异比较产生所有NaN值。我是不是犯了什么逻辑错误?这里出了什么问题?
其他详细信息:这是一个DataFrame的示例。
在这个例子中,有两行我们有上个月的非空值。
并且......所需输出应如下所示:
2条答案
按热度按时间7lrncoxx1#
当你除以零时,Pandas会返回
inf
,当你除以零时,Pandas会返回NaN
,这就是为什么你的ZeroDivisionError
没有被捕获,你得到了一个返回值NaN
。我们可以使用下面的代码手动处理您想要的情况,它将计算非零
'metric_thismonth'
的百分比差异,并将NaN
放置为零'metric_thismonth'
edit:让我们尝试在apply()函数中使用lambda函数
ccrfmcuu2#
在两列上使用
.fillna(0)
可以解决问题(如另一个问题的解决方案中所述):