Панды преобразовывают категорию в числовое значение для строки как одного объекта, но получают массив чисел - PullRequest
2 голосов
/ 16 апреля 2019

Я хотел бы разложить столбец данных в пандах и добавить его в качестве нового столбца. Значением столбца является строка.

, например

 COL_1
 'TRY A TEST'
 'TRY A TEST' 
 'PLAY Q'
 'PLAY Q'

Я хочу, чтобы оно было преобразовано в числовое значение, например:

 COL_1     NEW_COL
 'TRY A TEST'   0
 'TRY A TEST'   0
 'PLAY Q'       1
 'PLAY Q'       1

Но я получил:

 x = 'TRY A TEST'
 my_df['NEW_COL'] = my_df['COL_1'].apply(lambda x: pd.factorize(x)[0])

 (array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64), array(['TRY A TEST'], dtype=object))

Кажется, что каждый символ преобразуется в число.

Я также получил ошибку:

 TypeError: 'float' object is not iterable

В "COL_1" нет числа с плавающей запятой, и это строка.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Простое решение:

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
my_df['NEW_COL'] = le.fit_transform(my_df['COL_1'].astype(str))
my_df

        COL_1  NEW_COL
0  TRY A TEST        1
1  TRY A TEST        1
2      PLAY Q        0
3      PLAY Q        0

Для больших кадров данных / нескольких столбцов вы можете просто использовать для цикла

Например.

my_df

     pets     owner   location
0     cat     Champ  San_Diego
1     dog       Ron   New_York
2     cat     Brick   New_York
3  monkey     Champ  San_Diego
4     dog  Veronica  San_Diego
5     dog       Ron   New_York

############
for column in ['pets','owner','location']:
    le = preprocessing.LabelEncoder()
    my_df[str(column+'_num')] = le.fit_transform(my_df[column].astype(str))
############


my_df

     pets     owner   location  pets_num  owner_num  location_num
0     cat     Champ  San_Diego         0          1             1
1     dog       Ron   New_York         1          2             0
2     cat     Brick   New_York         0          0             0
3  monkey     Champ  San_Diego         2          1             1
4     dog  Veronica  San_Diego         1          3             1
5     dog       Ron   New_York         1          2             0
1 голос
/ 16 апреля 2019

Альтернативный метод, используйте Categorical dtype:

my_df['NEW_COL'] = my_df['COL_1'].astype('category').cat.codes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...