![](/img/trans.png)
[英]Python/sklearn - preprocessing.MinMaxScaler 1d deprecation
[英]preprocessing.MinMaxScaler and preprocessing.normalize return dataframe of Nulls
我有一個以浮點數作為數據的數據框,我想對數據進行規范化,因此首先將其轉換為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%)? 如何解決此錯誤並避免輸出為零?
EDITED
我的數據看起來像(有更多的列和行):
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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.