Pandas:通过正则表达式用散列字符串替换字符串

2024-09-30 12:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个29列的数据框,需要用字符串的散列部分替换某些列中的字符串部分

列的示例如下所示:

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

捕获字符串部分的代码:

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

我想将'hello'更改为'(?<=PLAN=)(^"]+ ;)'的散列,但这样不行。想检查之前是否有人在不逐行循环数据帧的情况下这样做


Tags: 数据字符串代码testtrue示例hello情况
1条回答
网友
1楼 · 发布于 2024-09-30 12:19:09

以下是我的建议:

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

相关问题 更多 >

    热门问题