2016-10-30 3 views
2

パンダの新機能。 Rユーザーは、サブ集団を分析するために分割、適用、結合パターンを使用します。例えば性別、1 =「男性」、2 =「女性」、9 = '不明。パンダの値をカテゴリレベルにマップ

「Mon」、「Tue」などに対応する2万以上の値が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 

私は、ラベルは再の動作を取得二回、代わりに「日曜日」を与える整数値にマッピングすることが期待しています-cycledリスト。

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')) 

有望に見える:

次は私のような.factorize属性をしてみてください。

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