資料預處理 將分類和順序資料轉換為標誌變數

2021-09-18 04:20:32 字數 2965 閱讀 4900

分類資料和順序資料是常見的資料型別。

說明:在本示例中,將模擬有兩列資料分別出現分類資料和順序資料的情況,並通過自定義**以及sklearn**分別進行標誌轉換。

import pandas as pd 

from sklearn.preprocessing import onehotencoder # 匯入onehotencoder

# 生成資料

df = pd.dataframe(

)print

(df)

id     ***   level

0 3566841 male high

1 6541227 female low

2 3512441 female middle

df_new = df.copy(

)# 複製乙份新的資料用來儲存轉換結果

for col_num, col_name in

enumerate

(df)

:# 迴圈讀出每個列的索引值和列名

col_data = df[col_name]

# 獲得每列資料

col_dtype = col_data.dtype # 獲得每列dtype型別

if col_dtype ==

'object'

:# 如果dtype型別是object(非數值型),執行條件

df_new = df_new.drop(col_name,1)

# 刪除df資料框中要進行標誌轉換的列

value_sets = col_data.unique(

)# 獲取分類和順序變數中的每個值

for value_unique in value_sets:

# 讀取分類和順序變數中的每個值

col_name_new = col_name +

'_'+ value_unique # 建立新的列名,使用「原標題+值」的命名方式

col_tmp = df.iloc[

:, col_num]

# 獲取原始資料列

new_col =

(col_tmp == value_unique)

# 將原始資料列與每個值進行比較,相同為true,否則為false

df_new[col_name_new]

= new_col # 為最終結果增加新列值

print

(df_new)

id  ***_male  ***_female  level_high  level_low  level_middle

0 3566841 true false true false false

1 6541227 false true false true false

2 3512441 false true false false true

df2 = pd.dataframe(

)id_data = df.values[:,

:1]# 獲得id列

print

(id_data)

[[3566841]

[6541227]

[3512441]]

transform_data = df2.values[:,

1:]# 指定要轉換的列

print

("標誌轉換前資料:"

)print

(transform_data)

enc = onehotencoder(

)# 建立模型物件

df2_new = enc.fit_transform(transform_data)

.toarray(

)# 標誌轉換,使用toarray方法輸出矩陣。

print

("標誌轉換後資料:"

)print

(df2_new)

df2_all = pd.concat(

(pd.dataframe(id_data)

, pd.dataframe(df2_new)

), axis=1)

# 組合為資料框

print

("組合後的資料:"

)print

(df2_all)

標誌轉換前資料:

[[1 3]

[2 1]

[2 2]]

標誌轉換後資料:

[[1. 0. 0. 0. 1.]

[0. 1. 1. 0. 0.]

[0. 1. 0. 1. 0.]]

組合後的資料:

0 0 1 2 3 4

0 3566841 1.0 0.0 0.0 0.0 1.0

1 6541227 0.0 1.0 1.0 0.0 0.0

2 3512441 0.0 1.0 0.0 1.0 0.0

通過pd.dataframe進行構建新的資料框;

通過pandas中的df[name]和iloc進行資料切片;

通過pandas中的drop()方法刪除特定的列,當然也可以用於刪除行;

通過pandas的dtype獲得物件的dtype型別,df.dtypes也能實現所有物件的型別;

通過np.unique()方法獲取唯一值;

通過字串組合(使用+號)建立乙個新的字串

直接使用矩陣(series)物件無需遍歷每個值進行矩陣比較和數值計算。

通過pandas的df_new[col_name_new]方法直接新增列值。

新聞分類 資料預處理

結構化資料,是可以表示成多行多列的形式,並且,每行 列 都有著具體的含義。非結構化資料,無法合理地表示為多行多列的形式,即使那樣表示,每行 列 也沒有具體的含義。文字資料,是一種非結構化資料,與我們之前分析的結構化資料有所不同。因此,其預處理的步驟與方式也會與結構化資料有所差異。文字資料預處理主要包...

python資料預處理之將類別資料轉換為數值的方法

在進行python資料分析的時候,首先要進行資料預處理。有時候不得不處理一些非數值類別的資料,嗯,今天要說的就是面對這些資料該如何處理。目前了解到的大概有三種方法 1,通過labelencoder來進行快速的轉換 3,通過get dummies方法來轉換。import pandas as pd fr...

資料預處理系列 (五)分類變數處理

博主簡介 風雪夜歸子 英文名 allen 機器學習演算法攻城獅,喜愛鑽研machine learning的黑科技,對deep learning和artificial intelligence充滿興趣,經常關注kaggle資料探勘競賽平台,對資料 machine learning和artificial...