Как объединить категориальные значения, которые на самом деле одинаковы в пандах? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть столбец категории класса. Он назван плохо, но категориальные значения на самом деле одинаковы. Они все в одной колонке. Мне нужно заменить все повторяющиеся значения на «class1». в столбце должно быть только 3 значения: class1, class2, standard.

  • class_1
  • class1
  • Class_1
  • Class1
  • Стандарт
  • класс2

Ответы [ 3 ]

2 голосов
/ 14 октября 2019

Если все, что вы хотите сделать, это изменить class_1 на class1, тогда все просто:

df['col'] = df['col'].str.replace('class_1', 'class1', case=False)

Редактировать: установить регистр в false.

1 голос
/ 14 октября 2019

Вы можете использовать это

g=df['column'].apply(lambda x: re.sub("\D", "", x))
df['column']=np.where(df['column'].str.contains('\d'),'Class'+g ,df['column'])

Выход

    column
0   Class1
1   Class1
2   Class1
3   Class1
4   Standard
5   Class2
0 голосов
/ 14 октября 2019

Используйте Series.str.lower с Series.str.replace:

df['col'] = df['col'].str.lower().str.replace('_','')
print (df)
        col
0    class1
1    class1
2    class1
3    class1
4  standard
5    class2

Другая идея заключается в извлечении числовых значений из значений Series.str.extract, добавьте Class строку и в последнюю очередь замените нечисловые значения на оригинальные на Series.fillna:

df['col'] = ('Class' + df['col'].str.extract('(\d+)', expand=False)).fillna(df['col'])
print (df)
        col
0    Class1
1    Class1
2    Class1
3    Class1
4  Standard
5    Class2

Сведения :

print (df['col'].str.extract('(\d+)', expand=False))
0      1
1      1
2      1
3      1
4    NaN
5      2
Name: col, dtype: objec

print (('Class' + df['col'].str.extract('(\d+)', expand=False)))
0    Class1
1    Class1
2    Class1
3    Class1
4       NaN
5    Class2
Name: col, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...