![](/img/trans.png)
[英]How to convert this pandas dataframe from a tall to a wide representation, dropping a column
[英]How to convert a pandas dataframe from a string based categorical column to a numeric representation
我在數據框中有一個看起來像這樣的列:
df['label']
['some_label', 'some_label', 'a_diff_label', 'a_diff_label',...]
我想將其轉換為這樣的內容:
[1,1,0,0,...]
有很多方法可以做到這一點(等因素)
pd.Series(['some_label', 'some_label', 'a_diff_label', 'a_diff_label']).astype('category').cat.codes
Out[19]:
0 1
1 1
2 0
3 0
dtype: int8
您也可以使用sklearn
LabelEncoder
,如果需要,還可以將標簽編碼轉換回去。 ( sklearn LabelEncoder文檔 ):
import pandas as pd
from sklearn import preprocessing
df = pd.DataFrame({'label': ['some_label', 'some_label', 'a_diff_label', 'a_diff_label']})
le = preprocessing.LabelEncoder()
df['label'] = le.fit_transform(df['label'])
我知道它已經被回答了,但是您可能想要使用從代碼到標簽的映射,反之亦然,並帶有幾個轉換函數。 像這樣:
import pandas as pd
col_map = pd.DataFrame.from_dict({
'some_label': 0,
'a_diff_label': 1,
}, orient='index')
def label_to_code(label):
return col_map[col_map.index == label][0].values[0]
def code_to_label(code):
return col_map[col_map[0] == code].index[0]
df = pd.DataFrame(data={'label': ['some_label', 'some_label', 'a_diff_label', 'a_diff_label']})
df['code'] = df['label'].apply(label_to_code)
df['another_label'] = df['code'].apply(code_to_label)
print(df)
由於我發現的類似問題非常復雜且難以理解,因此我發布了一個簡單的答案。
只要這樣做:
df['label'] = (df['label'] == 'some_label').astype(int)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.