Log transformation-ValueError: cannot convert float NaN to integer
Log transformation-ValueError: cannot convert float NaN to integer
有些列的数据不服从正态分布,想用对数变换来归一化。
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 的值,log return NaN 和下一行中的绘图将抛出错误。
- 重新检查log计算后是否有NaN值
示例 来自 Using numpy.log() on 0
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
解释:
零的对数没有定义。这不是一个实数,因为你永远不可能通过将任何东西提高到任何其他东西的幂来得到零。
有些列的数据不服从正态分布,想用对数变换来归一化。
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 的值,log return NaN 和下一行中的绘图将抛出错误。
- 重新检查log计算后是否有NaN值
示例 来自 Using numpy.log() on 0
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
解释:
零的对数没有定义。这不是一个实数,因为你永远不可能通过将任何东西提高到任何其他东西的幂来得到零。