パンダにはこれを可能にする機能があるのだろうかと思っていました。パンダの順序レベルを数値に変換
レベルが[低、中、高]の列があります。
[1,2,3]に変換して線形回帰を実行したいと思います。しかし、現在私がやっているのはdf[df['interest_level'] == 'low'] = 1
です。これを行うより良い方法はありますか?
ありがとうございました。
パンダにはこれを可能にする機能があるのだろうかと思っていました。パンダの順序レベルを数値に変換
レベルが[低、中、高]の列があります。
[1,2,3]に変換して線形回帰を実行したいと思います。しかし、現在私がやっているのはdf[df['interest_level'] == 'low'] = 1
です。これを行うより良い方法はありますか?
ありがとうございました。
使用pd.factorize()方法:あなたも、あなたの新しい数値を分類することができます
df['interest_level'] = pd.factorize(df['interest_level'])[0]
は(これは多くのメモリを節約するかもしれません):
サンプルDATAFRAME:
In [34]: df = pd.DataFrame({'interest_level':np.random.choice(['medium','high','low'], 10)})
In [35]: df
Out[35]:
interest_level
0 high
1 low
2 medium
3 high
4 low
5 high
6 high
7 low
8 low
9 medium
ソリューション:
In [36]: df['interest_level'], cats = pd.factorize(df['interest_level'])
In [37]: df['interest_level'] = pd.Categorical(df['interest_level'], categories=np.arange(len(cats)))
In [38]: df
Out[38]:
interest_level
0 0
1 1
2 2
3 0
4 1
5 0
6 0
7 1
8 1
9 2
In [39]: cats # this can be used for the backtracing ...
Out[39]: Index(['high', 'low', 'medium'], dtype='object')
In [40]: df.memory_usage()
Out[40]:
Index 80
interest_level 34 # <---- NOTE: only 34 bytes used for 10 integers
dtype: int64
In [41]: df.dtypes
Out[41]:
interest_level category
dtype: object
あなたがmap
を使用することができます。
d = {'low':1,'medium':2,'high':3}
df['interest_level'] = df['interest_level'].map(d)
サンプル:
df = pd.DataFrame({'interest_level':['medium','high','low', 'low', 'medium']})
print (df)
interest_level
0 medium
1 high
2 low
3 low
4 medium
d = {'low':1,'medium':2,'high':3}
df['interest_level'] = df['interest_level'].map(d)
print (df)
interest_level
0 2
1 3
2 1
3 1
4 2
別の解決策は、Categorical
にキャストし、その後cat.codes
使用されています
categories = ['low','medium','high']
df['interest_level'] = df['interest_level'].astype('category',
categories=categories,
ordered=True).cat.codes + 1
print (df)
interest_level
0 2
1 3
2 1
3 1
4 2
を私は問題があると思いますが、あなたが '高い必要がある予測します'to' 3'、lowから '1'になります。これは列の順序に依存するためです。まず、0に変換されてから1になり、最後に2になります。 – jezrael
@jezrael、AFIKの値は大きな役割を果たさない - 主な問題は、回帰/分類方法はしばしば非数値のdtypeを受け入れないことです... – MaxU
はい、それはOPによります。必要なのは数値に変換するだけで、マッピングは必要ない場合は、ソリューションを使用することができます。しかし、値の順序が変更された場合、マッピングは異なります。それを予測することは不可能です。 – jezrael