Застрял в TypeError: Невозможно сравнить типы 'ndarray (dtype = object)' и 'str' - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть поле, сохраненное как объект в моем df, и я пытаюсь заменить низкочастотные значения на «other» следующим кодом:

cols = ['Keyword']

for col in cols:
    val = df_ch[col].value_counts()
    y = val[val < 10000].index

df_ch[col] = df_ch[col].replace({x:'other' for x in y})

Но у меня по-прежнему возникает эта ошибка:

TypeError: Cannot compare types 'ndarray(dtype=object)' and 'str'

Чего мне не хватает?

Вот как выглядит поле:

df_ch['Keyword'].head(20)
Out[55]: 
0                 (not provie)
1                 (not provie)
2                    (not set)
3                    (not set)
4                 (not provie)
5                 (not provie)
6                    (not set)
7                    (not set)
8                     keyword1
9                 (not provie)
10                   (not set)
11                   (not set)
12                (not provie)
13                (not provie)
14                   (not set)
15                (not provie)
16                (not provie)
17                     display
18                (not provie)
19                (not provie)
Name: Keyword, dtype: object

1 Ответ

0 голосов
/ 09 апреля 2019

IIUC, вы хотите заменить имена групп на Other, если их количество меньше определенного числа.

В вашем методе использование функции replace неверно. В этом случае вы должны передать словарь в качестве входных данных, который имеет отображение значения столбца:

df_ch.replace({'Keyword': {x:'other' for x in y}}, inplace=True)

Вот еще один подход без цикла

Сначала посчитайте цифры

x = df_ch['Keyword'].value_counts().reset_index()
#     index          0
#0  (not provie)    11
#1  (not set)        7
#2  keyword1         1
#3  display          1

Затем присвойте Other группам, число которых ниже определенного порога (5 здесь).

df_ch.loc[df_ch['Keyword'].isin(x['index'].loc[x['Keyword']<5]), 'Keyword']='Other'
df_ch['Keyword']


0   (not provie)
1   (not provie)
2   (not set)
3   (not set)
4   (not provie)
5   (not provie)
6   (not set)
7   (not set)
8   Other
9   (not provie)
10  (not set)
11  (not set)
12  (not provie)
13  (not provie)
14  (not set)
15  (not provie)
16  (not provie)
17  Other
18  (not provie)
19  (not provie)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...