Заменить значения из одного столбца другим столбцом Pandas DataFrame - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть pf для данных pandas с идентификаторами в виде строк: я пытаюсь создать столбцы new_claim и new_description

example df

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

Я могу запустить один

date_reg = re.compile(r'\b'+df['old_id'][1]+r'\b')

df['new_claim'] = df['claim'].replace(to_replace=date_reg, value=df['external_id'], inplace=False)

Но если у меня есть

date_reg = re.compile(r'\b'+df['claim']+r'\b')

Тогда я получаю "TypeError: объекты 'Series' являются изменяемыми, поэтому они не могутbe hashed "

Другой подход, который я выбрал

df['new_claim'] = df['claim']

for i in range(5):
    old_id = df['old_id'][i]
    new_id = df['external_id'][i]

    df['new_claim'][i] = df['claim'][i].replace(to_replace=old_id,value=new_id)

, который дает TypeError: replace () не принимает аргументов ключевого слова

1 Ответ

0 голосов
/ 22 февраля 2019

Используя только метод pandas.replace () :

df.old_id = df.old_id.fillna(0).astype('int')

list_old = list(map(str, df.old_id.tolist()))
list_new = list(map(str, df.external_id.tolist()))

df['new_claim'] = df.claim.replace(to_replace=['Claim ID: ' + e for e in list_old], value=['Claim ID: ' + e for e in list_new], regex=True)
df['new_description'] = df.description.replace(to_replace=['\* ' + e + '\\n' for e in list_old], value=['* ' + e + '\\n' for e in list_new], regex=True)

Создает следующий вывод:

enter image description here

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