Могу ли я использовать функцию замены панд, чтобы заменить разные значения в нескольких столбцах уникальными значениями? - PullRequest
0 голосов
/ 05 января 2019

У меня следующая простая проблема, представьте, что у меня есть следующий фрейм данных:

df = pd.DataFrame({'A': ['foo', 1, 2, 3, 4],
                   'B': [5, 'dude', 7, 8, 9],
                   'C': ['5', '5', 'dude', '5', '5']})
print(df)

     A     B     C
0  foo     5     5
1    1  dude     5
2    2     7  dude
3    3     8     5
4    4     9     5

Теперь я хочу заменить значения ['foo','dude','dude'] в столбцах A, B и C соответственно своими уникальными значениями. Я смог сделать это, используя функцию панды replace.

df['A'] = df['A'].replace('foo', value = 68 ).astype(float)
df['B'] = df['B'].replace('dude', value = 46).astype(float)
df['C'] = df['C'].replace('dude', value = 86).astype(float)

Это работает, но я знаю, что ранее во многих кодах, которые я написал, был гораздо более простой и эффективный способ решения подобных проблем. У меня есть интуитивное чувство, что есть лучший способ сделать это, однако я не уверен, что это может быть.

Вот что я попробовал.

dict1={'A':{'foo':68},'B':{'dude': 46}, 'C':{'dude':86}}
dfclean = df.replace(dict1)

но безрезультатно. Это самый эффективный способ заменить их каждой своей линией?

EDIT:

Ух ты, я полный идиот ... Решение, которое я написал выше, на самом деле работает, я просто печатал df, а не dfclean. Благодаря.

1 Ответ

0 голосов
/ 05 января 2019

Если у вас есть большое количество значений, подлежащих замене, тогда map () - более быстрый вариант, чем .replace (для меня это примерно 100x). Недостатком является то, что с картой у вас нет регулярного выражения для замены подстроки - в случае, если вам это нужно.

Посмотрите, работает ли это для вас:

# Map the dictionary to the whole dataframe
df= df.map(dict1).fillna(df)

Использование здесь fillna предотвращает появление NaN в случае, если строка не заменена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...