我有数据浮点数作为数据,我想将数据规范化,所以首先我把它转换成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发生了什么(假设我的初始数据some在某些行中包含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
发布于 2015-10-30 10:27:29
这不是一个bug,它之所以发生是因为您试图将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。
https://stackoverflow.com/questions/33394267
复制相似问题