pandas 對dataframe進行資料預處理

2021-10-04 22:55:36 字數 1575 閱讀 3160

from sklearn import preprocessing

enc = preprocessing.onehotencoder()

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])    # fit來學習編碼

enc.transform([[0, 1, 3]]).toarray()    # 進行編碼

輸出:array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]])

解釋:再來看要進行編碼的引數[0 , 1,  3], 0作為第乙個特徵編碼為10,  1作為第二個特徵編碼為010, 3作為第三個特徵編碼為0001.  故此編碼結果為1 0 0     1 0 0      0 0 1

優點:使用one-hot編碼,將離散特徵的取值擴充套件到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點。將離散型特徵使用one-hot編碼,會讓特徵之間的距離計算更加合理。離散特徵進行one-hot編碼後,編碼後的特徵,其實每一維度的特徵都可以看做是連續的特徵。就可以跟對連續型特徵的歸一化方法一樣,對每一維特徵進行歸一化。比如歸一化到[-1,1]或歸一化到均值為0,方差為1。

缺點:當類別的數量很多時,特徵空間會變得非常大。在這種情況下,一般可以用pca來減少維度。而且one hot encoding+pca這種組合在實際中也非常有用。

適用場景:tree model不太需要one-hot編碼: 對於決策樹來說,one-hot的本質是增加樹的深度。基於距離的近鄰需要,如knn

使用:enc.fit(df['column1','column2',...])

enc.transform(df['column1','column2',...])

即可把df的column1和column2變成獨熱編碼(假如是性別列:則男變成(1,0)女變成(0,1))

# coding:utf-8

from sklearn import preprocessing

le = preprocessing.labelencoder()

le.fit(["japan", "china", "japan", "korea","china"])

print('標籤個數:%s' % le.classes_)

print('標籤值標準化:%s' % le.transform(["japan", "china", "japan", "korea","china"]))

print('標準化標籤值反**%s' % le.inverse_transform([0, 2 ,0 ,1 ,2]))

# 標籤個數:['japan' 'korea' 'china']

# 標籤值標準化:[0 2 0 1 2]

# 標準化標籤值反**['japan' 'china' 'japan' 'korea' 'china']

缺點:比如有[dog,cat,dog,mouse,cat],我們把其轉換為[1,2,1,3,2]。這裡就產生了乙個奇怪的現象:dog和mouse的平均值是cat。

pandas中dict和dataFrame互轉

pd.dataframe dict a 使用df.to dict 缺省會把key和值分開 引數 dict 預設 list series split records index 如果是list dict 這種巢狀情況轉的df,迴轉需要使用records 拿上面的資料舉例,df b a b c 0 0 ...

pandas的資料結構之DataFrame

dataframe是乙個 型的資料結構,它含有一組有序的列,每列可以是不同資料型別的資料。dataframe既有行索引也有列索引,可以將它看作為乙個由series組成的字典 共用同乙個索引 dataframe中的資料是以乙個或多個二維塊儲存的,而不是列表 字典或別的一維資料結構。a 通過字典建立,字...

pandas 把字典轉換成DataFrame

把dictd 轉換成dataframe,首先,dataframe的語法格式應為 import pandas as pd df pd.dataframe a 是columns,對應的是list12 輸出 a 0 012 但是如果是 df pd.dataframe 直接輸入dict 1會報錯 value...