Pandas: замена строки хешированной строкой через регулярное выражение - PullRequest
1 голос
/ 06 апреля 2020

У меня есть DataFrame с 29 столбцами, и мне нужно заменить часть строки в некоторых столбцах хешированной частью строки.

Пример столбца следующий:

ABSX, PLAN=PLAN_A ;SFFBJD
ADSFJ, PLAN=PLAN_B ;AHJDG
... 
... 

Код, который захватывает часть строки:

Test[14] = Test[14].replace({'(?<=PLAN=)(^"]+ ;)' :'hello'}, regex=True)

Я хочу изменить 'hello' на ha sh из '(?<=PLAN=)(^"]+ ;)', но это не сработает. Хотели проверить, делал ли это кто-нибудь раньше, не зацикливая строку за строкой DataFrame?

1 Ответ

2 голосов
/ 07 апреля 2020

вот что я предлагаю:

import hashlib
import re
import pandas as pd
# First I reproduce a similar dataset
df = pd.DataFrame({"v1":["ABSX", "ADSFJ"],
                   "v2": ["PLAN=PLAN_A", "PLAN=PLAN_B"],
                   "v3": ["SFFBJD", "AHJDG"]})

# I search for the regex and create a column matched_el with the hash
r = re.compile(r'=[a-zA-Z_]+')
df["matched_el"] = ["".join(r.findall(w)) for w in df.v2]
df["matched_el"] = df["matched_el"].str.replace("=","")
df["matched_el"] = [hashlib.md5(w.encode()).hexdigest() for w in df.matched_el]
# Then I replace in v2 using this hash
df["v2"] = df["v2"].str.replace("(=[a-zA-Z_]+)", "=")+df["matched_el"]
df = df.drop(columns="matched_el")

Вот результат

      v1                                     v2      v3
0   ABSX  PLAN=8d846f78aa0b0debd89fc1faafc4c40f  SFFBJD
1  ADSFJ  PLAN=3b9a3c8184829ca5571cb08c0cf73c8d   AHJDG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...