pandas, как преобразовать любые столбцы, содержащие слова, в числа (т. Е. сопоставить их)?

#python-3.x #pandas #mapping

#python-3.x #pandas #сопоставление

Вопрос:

У меня есть фрейм данных с такими столбцами, как название компании, цена, покупка / продажа, кол-во. Я хочу преобразовать любой столбец, содержащий строку, в числовое значение. Т.Е. сопоставление, скажем, buy = 1, sell = 2 и т.д. В идеале я хотел бы создать функцию для этого.

Я знаю, что могу использовать:

 df['company_value'] = df['company_name'].rank(method='dense', ascending=False).astype(int)
  

Но как мне создать функцию для сопоставления любого столбца, содержащего строку / слово, с отображением?

Комментарии:

1. можем ли мы получить образец входных и выходных данных, чтобы мы могли воспроизвести и решить эту проблему?

Ответ №1:

Используя примерные данные EddyG о

 df = pd.DataFrame(np.array(['monday','tuesday','wednesday','monday','thursday','monday','friday','monday','saturday','sunday']),columns=['G'])
  

Вы могли бы просто использовать

 map_dict = dict(enumerate(df.G.unique()))
  

предоставляя вам

 {0: 'monday',
 1: 'tuesday',
 2: 'wednesday',
 3: 'thursday',
 4: 'friday',
 5: 'saturday',
 6: 'sunday'}
  

Ответ №2:

РЕДАКТИРОВАТЬ: было вызвано ответом Джоша Фридлендера ниже. Мне нравится его подход, но у него неправильное отображение. Используя эту идею:

 import numpy as np
import pandas as pd

df = pd.DataFrame(np.array(['monday','tuesday','wednesday','monday','thursday','monday','friday','monday','saturday','sunday']),columns=['G'])

def mapDFcol(df,colName):

    map_dict = dict([[j,i] for i,j in enumerate(df.loc[:,colName].unique())])

    df[colName 'map'] = [map_dict[i] for i in df.loc[:,colName] ]


    return df



mapDFcol(df,'G')