Как заменить ВСЕ конкретную строку в DataFrame на другую строку в Python - PullRequest
0 голосов
/ 02 марта 2020

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

df.replace("x", "y", regex=True)
df.str.replace 

методы, но почему-то это не сработало для моего DataFrame.

У меня есть DataFrame, как показано ниже

To          From             CC               Title          Body
aa@bb   cc@rr; cd@ee    bg@hy; rg@we         jkasdf         jklasdf
er@ty    po@we          oi@we; we@iw         kljasldf        kasdf

У меня есть какой-то странный почтовый адрес, такой как / o-exchange \ Smith ---, поскольку я получил данные электронной почты Outlook с сервера электронной почты Exchange моей организации. Дело в том, что, похоже, у некоторых людей есть несколько типов этого странного адреса, поэтому я хочу изменить их в одно уникальное электронное письмо для этого конкретного человека.

Поэтому я попытался, как

df = df.replace("weird email", "unique email", regex=True)
and 
df['From'] = df['From'].str.replace("weird address", "unique address", regex=True)

но это не заменило все странные адреса на один и тот же уникальный адрес в конце концов. Есть ли какой-нибудь pythoni c способ заменить ВСЕ конкретную строку в другую строку?

Пример входов и выходов для моего DataFrame, такой как ниже

Input

        To                          From                            CC                
      abc@we                      weird@ww              long@ww; exchange@ee  
 weird@ww; exadress@ww             long@ww              long@ww; exchange@ww

Я проверил все разнообразие странных адресов, которые есть у конкретного человека, и я закодировал, как

df = df.replace('PersonA weird address1', 'Unique addressA')
df = df.replace('PersonA weird address2', 'Unique addressA')

df = df.replace('PersonB weird address1', 'Unique addressB')
df = df.replace('PersonB weird address2', 'Unique addressB')

, и мои требуемые результаты выглядят как

        To                          From                            CC                
      abc@we                      Unique@C              Unique@A; Unique@B  
 Unique@C; exadress@ww             Unique@A              Unique@A; Unique@B

Я составил список странных адресов и конкретный человек, который имеет адрес. Поэтому я просто хочу объединить все в один уникальный адрес, как указано выше.

1 Ответ

0 голосов
/ 03 марта 2020

создать словарь с ключами как то, что у вас есть, и значениями, как вы хотите, чем использовать карту в каждом столбце

keys = ["".join(x) for x in it.permutations(["a","b","c","d"],3)]
values = ["".join(x) for x in it.permutations(["e","f","g","h"],3)]
rand_dict = {}
for k in keys:
    rand_dict[k]=random.choice(values)
df = pd.DataFrame()
df["a"] = random.choices(keys,k = 10)
df["b"] = random.choices(keys,k = 10)
df["c"] = random.choices(keys,k = 10)
#till here we created a demo DataFrame

for col in df:
    df[col] = df[col].map(rand_dict).fillna(df[col])

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