分類資料和順序資料是常見的資料型別。
說明:在本示例中,將模擬有兩列資料分別出現分類資料和順序資料的情況,並通過自定義**以及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...