python - 日志转换-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 值,但什么也没有。那么它有什么问题呢?
解决方案
你什么时候检查是否有 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
解释:
零的对数没有定义。这不是一个实数,因为你永远无法通过将任何事物提升到其他事物的力量来获得零。
推荐阅读
- sql - 插入时的 SSIS 错误 - 维度表中的新主键时出错
- java - 一种递归方法和一种迭代方法的空堆栈
- android - 拦截 NavigationUI.onNavDestinationSelected() 以使用“inclusive = true”使 backstack 弹出
- c - 蓝牙通信延迟大
- mysql - Mysql - 如何合并两个不重复的 json 字符串数组?
- php - PHP datediff 过日问题
- elasticsearch - 未根据 ES 查询中传递的大小参数进行聚合
- javascript - 没有窗口的窗口属性
- matlab - 如果语句中的 X=0 的值未在 matlab 图中绘制
- azure - Azure ARM 部署 - 多个订阅