簡體   English   中英

preprocessing.MinMaxScaler和preprocessing.normalize返回null的數據幀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM