python中数据帧内列表中的正则表达式替换

2024-10-05 14:23:29 发布

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

您好,我有数据帧,例如:

COL1 COL2  COL3 
G1   1     [[(OK2_+__HELLO,OJ_+__BY),(LO_-__HOLLA,KUOJ_+__BY)]]
G1   2     [[(JU3_+__BO,UJ3_-__GET)]]

如何在COL3列表中使用re.sub(r'.*__', '')

并在“__之前获取一个没有任何内容的新列:

    COL1 COL2  COL3 COL4 
    G1   1     [[(OK2_+__HELLO,OJ_+__BY),(LO_-__HOLLA,KUOJ_+__BY)]] [[(HELLO,OBY),(HOLLA,BY)]]
    G1   2     [[(JU3_+__BO,UJ3_-__GET)]] [(BO,GET)]]

以下是数据:

data= {'COL1': {0: 'G1', 1: 'G1'}, 'COL2': {0: 1, 1: 2}, 'COL3 ': {0: "[[(OK2_+__HELLO,OJ_+__BY),(LO_-__HOLLA,KUOJ_+__BY)]]", 1: "[[(JU3_+__BO,UJ3_-__GET)]]"}}

df = pd.DataFrame.from_dict(data)

Tags: hellologetbycol2col3col1bo
1条回答
网友
1楼 · 发布于 2024-10-05 14:23:29

更新的数据解决方案

data= {'COL1': {0: 'G1', 1: 'G1'}, 'COL2': {0: 1, 1: 2}, 'COL3 ': {0: "[[(OK2_+__HELLO,OJ_+__BY),(LO_-__HOLLA,KUOJ_+__BY)]]", 1: "[[(JU3_+__BO,UJ3_-__GET)]]"}}
df = pd.DataFrame.from_dict(data)
df['COL4'] = df['COL3 '].str.replace(r"([,(])[^(),]*__", r"\1")
df['COL4']
# => 0    [[(HELLO,BY),(HOLLA,BY)]]
#    1                 [[(BO,GET)]]
#    Name: COL4, dtype: object

regex demo

旧数据解决方案

您可以使用ast.literal_evalCOL3列中的字符串转换为列表列表,并在修改元组项目时对其进行迭代:

import ast
import pandas as pd
data= {'COL1': {0: 'G1', 1: 'G1'}, 'COL2': {0: 1, 1: 2}, 'COL3 ': {0: "[[('OK2_+__HELLO','OJ_+__BY'),('LO_-__HOLLA','KUOJ_+__BY')]]", 1: "[[('JU3_+__BO','UJ3_-__GET')]]"}}
df = pd.DataFrame.from_dict(data)

def repl(m):
    result = []
    for l in ast.literal_eval(m):
        ll = []
        for x, y in l:
            ll.append(tuple([re.sub(r'.*__', '', x), re.sub(r'.*__', '', y)]))
        result.append(ll)
    return str(result)

df['COL4'] = df['COL3 '].apply(repl)
df['COL4']
# => 0    [[('HELLO', 'BY'), ('HOLLA', 'BY')]]
#    1                       [[('BO', 'GET')]]

如果可以将结果保留为列表列表,则不需要使用str(result)

相关问题 更多 >