preprocessing.MinMaxScaler 和 preprocessing.normalize return 空值数据帧
preprocessing.MinMaxScaler and preprocessing.normalize return dataframe of Nulls
我有一个以浮点数作为数据的dataframe,我想对数据进行归一化,所以我先把它转换成int(否则我会报错ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
)
我的规范化代码:
def normalize_df():
x = my_df.values.astype(int)
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df = pd.DataFrame(x_scaled)
return df
我的输出是
0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
发生了什么(假设我的初始数据框在某些行中包含值 0
但小于数据框的 30%)?我该如何修复此错误并避免输出为零?
已编辑
我的数据看起来像(有更多的列和行):
36680 0 22498037 2266
0 2218 22502676 0
26141 0 22505885 4533
39009 0 22520711 4600
36237 0 22527171 5933
我试着让值从 0.0 到 1.0
这不是错误,它的发生是因为您试图将 NaN
值转换为整数,看看它是如何工作的(在我的机器上):
In [132]: a
Out[132]: array([ nan, 1., nan])
In [133]: a.astype(int)
Out[133]: array([-9223372036854775808, 1, -9223372036854775808])
所以每个 NaN
与数据集中的另一个整数相比都是非常小的值,这会导致不正确的缩放。
要解决此问题,您应该使用浮点数。在缩放之前,您需要摆脱 NaN
的一些插补,或者完全删除此类不完整的样本。看看sklearn.preprocessing.Imputer.
我有一个以浮点数作为数据的dataframe,我想对数据进行归一化,所以我先把它转换成int(否则我会报错ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
)
我的规范化代码:
def normalize_df():
x = my_df.values.astype(int)
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df = pd.DataFrame(x_scaled)
return df
我的输出是
0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21
0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
发生了什么(假设我的初始数据框在某些行中包含值 0
但小于数据框的 30%)?我该如何修复此错误并避免输出为零?
已编辑
我的数据看起来像(有更多的列和行):
36680 0 22498037 2266
0 2218 22502676 0
26141 0 22505885 4533
39009 0 22520711 4600
36237 0 22527171 5933
我试着让值从 0.0 到 1.0
这不是错误,它的发生是因为您试图将 NaN
值转换为整数,看看它是如何工作的(在我的机器上):
In [132]: a
Out[132]: array([ nan, 1., nan])
In [133]: a.astype(int)
Out[133]: array([-9223372036854775808, 1, -9223372036854775808])
所以每个 NaN
与数据集中的另一个整数相比都是非常小的值,这会导致不正确的缩放。
要解决此问题,您应该使用浮点数。在缩放之前,您需要摆脱 NaN
的一些插补,或者完全删除此类不完整的样本。看看sklearn.preprocessing.Imputer.