2016-10-30 62 views
2

熊貓新手。 R用戶使用拆分,應用和組合模式來分析子羣體。例如性別,1 ='男',2 ='女',9 ='未知。將熊貓值映射到絕對級別

我有一個數據幀,其日期列的20,000+值是整數1到7,對應於'星期一','星期二'等。我需要使用標籤類別而不是它們的原始int值。

我第一次嘗試是試圖.astype(「類」):

import numpy as np 
import pandas as pd 
dow = pd.DataFrame({'labels': ("Sunday","Monday","Tuesday",\ 
"Wednesday", "Thursday", "Friday", "Saturday")}) 

data = pd.DataFrame({'value': [1, 1, 2, 3, 4, 7, 8, 9, 0]}) 
data['formtatted'] = dow['labels'].astype('category') 
data 

value formtatted 
0 1 Sunday 
1 1 Monday 
2 2 Tuesday 
3 3 Wednesday 
4 4 Thursday 
5 7 Friday 
6 8 Saturday 
7 9 NaN 
8 0 NaN 

我預期的標籤映射到整數值給「星期日」兩次,而不是得到了重新的行爲循環清單。

接下來我試着像.factorize屬性:

data2 = pd.DataFrame({'values': [1, 1, 2, 3, 4, 7, 8, 9, 0]}) 
dow2 = pd.DataFrame({'labels': ["Sunday","Monday","Tuesday", \ 
"Wednesday", "Thursday", "Friday", "Saturday"]}) 
dow_cat = pd.factorize(dow2['labels']) 

dow_cat 
(array([0, 1, 2, 3, 4, 5, 6]), 
Index(['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 
    'Saturday'], dtype='object')) 

看起來很有希望。

data2['labels'] = dow_cat[0] 

但引發錯誤:值的長度不符合指標的長度

更多的搜索變成了: https://github.com/pandas-dev/pandas/blob/master/doc/source/categorical.rst#differences-to-rs-factor

指出:這是不可能在創建時指定的標籤。之後使用s.cat.rename_categories(new_labels)。

不夠公平:

dow3 = pd.DataFrame({'values': [1, 2, 3, 4, 5, 6, 7]}, 
       dtype="category") 

dow3.values = dow3['values'].cat.rename_categories(["Sunday", \ 
"Monday","Tuesday","Wednesday", \ 
"Thursday", "Friday", "Saturday"]) 
df3['formatted'] = dow3["values"] 

df3 

    values formatted 
0 1 Sunday 
1 1 Monday 
2 2 Tuesday 
3 3 Wednesday 
4 4 Thursday 
5 7 Friday 
6 8 Saturday 
7 9 NaN 
8 0 NaN 

哪個地方,我開始,以重新循環列表的行爲。

我敢打賭,我忽視了這個顯而易見的事實,但它無法迴避。關於我從哪裏去的建議?

+1

什麼是你的問題? – Boud

回答

2

不知道我在理解你在做什麼......也許你正在過度簡單的事情:這是你想要的嗎?如果不是,請提供一個有輸入和預期輸出的清晰示例。

data = pd.DataFrame({'values': [1, 1, 2, 3, 4, 7, 8, 9, 0]}) 
dow = { 
    0:"Sunday", 
    1:"Monday", 
    2:"Tuesday", 
    3:"Wednesday", 
    4:"Thursday", 
    5:"Friday", 
    6:"Saturday" 
} 
data["dow"] = data['values'].map(dow) 

print data 

結果:

values  dow 
0  1  Monday 
1  1  Monday 
2  2 Tuesday 
3  3 Wednesday 
4  4 Thursday 
5  7  NaN 
6  8  NaN 
7  9  NaN 
8  0  Sunday 
+0

謝謝,朱利安。這是我正在尋找的行爲。 – RandyB