大熊猫:通过正则表达式将字符串替换为哈希字符串

时间:2020-04-06 12:19:45

标签: python regex pandas

我有一个包含29列的DataFrame,并且需要用字符串的散列部分替换某些列中的一部分字符串。

该列的示例如下:

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

捕获字符串部分的代码:

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

我想将'hello'更改为'(?<=PLAN=)(^"]+ ;)'的哈希,但是这种方式无法正常工作。是否想检查是否有人在没有逐行循环DataFrame之前这样做?

1 个答案:

答案 0 :(得分:2)

这是我的建议:

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