首页 > 解决方案 > 日志转换-ValueError:无法将浮点 NaN 转换为整数

问题描述

某些列的数据不遵循正态分布,我想通过对数转换对其进行归一化。

fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(14,6))
#1
sns.distplot(train_df['MasVnrArea'], fit=stats.norm, ax=ax[0])
ax[0].set_title('Before Normalization')

#2
train_df['MasVnrArea'] = np.log(train_df['MasVnrArea'])
ax[1].set_title('After Normalization')
sns.distplot(train_df['MasVnrArea'], fit=stats.norm, ax=ax[1])

部分#1工作正常,但是当涉及到部分时,#2它给了我这个错误:

ValueError: cannot convert float NaN to integer

我已经检查了此列中是否有 NaN 值,但什么也没有。那么它有什么问题呢?

标签: pythonpandasnormalizationvalueerrornormal-distribution

解决方案


你什么时候检查是否有 NaN 值?

您是否检查train_df['MasVnrArea']过值是否等于或小于 0?如果存在等于或小于 0 的值,则日志返回 NaN,并且下一行中的绘图将引发错误。

  • 对数计算后再次检查是否有 NaN 值。

在 0上使用 numpy.log() 的示例

import numpy as np 
print(np.log(0))

输出:

-inf 
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in log

解释:

零的对数没有定义。这不是一个实数,因为你永远无法通过将任何事物提升到其他事物的力量来获得零。


推荐阅读