簡體   English   中英

如何將熊貓數據框從基於字符串的分類列轉換為數字表示形式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM