pandas的factorize(),numpy庫unique函數

1、factorize函數可以將Series中的標稱型數據映射稱爲一組數字,相同的標稱型映射爲相同的數字。

factorize函數的返回值是一個tuple(元組),元組中包含兩個元素。

第一個元素是一個array,其中的元素是標稱型元素映射爲的數字;

第二個元素是Index類型,其中的元素是所有標稱型元素,沒有重複。

# coding=utf-8
import numpy as np
import xgboost as xgb
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import csv
from pandas import DataFrame

df = pd.DataFrame({"id":[1,2,3,4,5,6,3,2], "raw_grade":['a', 'b', 'b','a', 'a', 'e','c','a']})
print df
print '\n'
x = pd.factorize(df.raw_grade)
print x

結果:

   id raw_grade
0   1         a
1   2         b
2   3         b
3   4         a
4   5         a
5   6         e
6   3         c
7   2         a


(array([0, 1, 1, 0, 0, 2, 3, 0], dtype=int64), Index([u'a', u'b', u'e', u'c'], dtype='object'))

2、numpy庫unique函數解析


unique()函數返回參數數組中所有不同的值,並按照從小到大排序

該函數有兩個可選參數:

return_index: True 表示unique()後的新數據在原始數組中的下標;

return_inverse :True      表示重建後的數組中各元素對應的下標 在原始數組或列表中表示出來;


1)對於一維列表或數組A: 

import numpy as np
A = [1, 2, 2, 3, 4, 3]
a = np.unique(A)
print a            # 輸出爲 [1 2 3 4]
a, b, c = np.unique(A, return_index=True, return_inverse=True)
print a, b, c      # 輸出爲 [1 2 3 4], [0 1 3 4], [0 1 1 2 3 2]


注意:上面與下面的不之同之處

A = [4, 2, 2, 3, 1, 3]
a = np.unique(A)
print a            # 輸出爲 [1 2 3 4]
a, b, c = np.unique(A, return_index=True, return_inverse=True)
print a, b, c      # 輸出爲 [1 2 3 4] [4 1 3 0] [3 1 1 2 0 2]
說明:

c  重建後的列表[1 2 3 4]中各元素對應的下標 爲:0,1,2,3  ,  在原始數組或列表中表示出來[3 1 1 2 0 2];即4的下標爲3,3的下標爲2,2的下標爲1,1的下標爲0.

2)對於二維數組(“darray數字類型”): 

A = [[1, 2], [3, 4], [5, 6], [1, 2]]
A = np.array(A)   #列表類型需轉爲數組類型
a, b, c = np.unique(A.view(A.dtype.descr * A.shape[1]), return_index=True, return_inverse=True)
print a, b, c     #輸出爲 [(1, 2) (3, 4) (5, 6)], [0 1 2], [0 1 2 0]





發佈了165 篇原創文章 · 獲贊 547 · 訪問量 274萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章