#python #python-3.x #pandas
Вопрос:
У меня есть фрейм данных панд
0 column_1 column_2
1 Gm tri
2 Boi bi
3 Xv tri
4 Gm bi
5 Zl uni
6 Oe uni
Я хочу использовать приведенный ниже диктант для изменения значений в col2
dict_a = {'Gm':'tri', 'Boi':'bi', 'Xv':'uni', 'Zl':'uni', 'Oe':'bi'}
чтобы выглядеть так:
0 col1 col2
1 Gm tri
2 Boi bi
3 Xv uni
4 Gm tri
5 Zl uni
6 Oe bi
Комментарии:
1. Ты пробовал
pandas.DataFrame.apply
?
Ответ №1:
Попробуйте с map
:
import pandas as pd
df = pd.DataFrame({
'column_1': ['Gm', 'Boi', 'Xv', 'Gm', 'Zl', 'Oe'],
'column_2': ['tri', 'bi', 'tri', 'bi', 'uni', 'uni']
})
dict_a = {'Gm': 'tri', 'Boi': 'bi', 'Xv': 'uni', 'Zl': 'uni', 'Oe': 'bi'}
df['column_2'] = df['column_1'].map(dict_a)
print(df)
df
:
column_1 column_2
0 Gm tri
1 Boi bi
2 Xv uni
3 Gm tri
4 Zl uni
5 Oe bi
Ответ №2:
Вы могли бы попробовать это (однако, скорее всего, предпочтительнее будет сопоставление):
import pandas as pd #using version 1.1.3
# build the df as described
occurrences=['Gm','Boi','Xv','Gm','Zl','Oe']
df = pd.DataFrame(occurrences,columns=['col1'])
df['col2'] = pd.Series(['tri','bi','tri','bi','uni','uni'] )
#set dict
dict_a = {'Gm':'tri', 'Boi':'bi', 'Xv':'uni', 'Zl':'uni', 'Oe':'bi'}
#replace col2 values
df['col2']=df.replace({'col1': dict_a})
#review results
df.head()
- диктуйте:
- For a DataFrame nested dictionaries, e.g., ``{'a': {'b': np.nan}}``, are read as follows: look in column 'a' for the value 'b' and replace it with NaN. The `value` parameter should be ``None`` to use a nested dict in this way. You can nest regular expressions as well. Note that column names (the top-level dictionary keys in a nested dictionary) **cannot** be regular expressions.
Комментарии:
1. Вы пробовали это сделать? Это работает совершенно нормально. Кроме того, если вы прочтете документы, связанные с заменой, вы увидите информацию о словарях и замене.:
2. Не знаю, что не так, возможно, у вас проблемы с синтаксисом (отсутствующие скобки или скобки) или другая версия pandas. Более чем один способ освежевать кошку.
3. Это тоже хорошо работает для меня; 1 для обоих ответов, но имхо, это более читабельно из-за «заменить». Но, возможно, последний пункт из цитаты документации (который используется в ответе) может быть освещен..