数据帧中的部分字符串匹配

2024-04-26 20:43:47 发布

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

我有一个数据帧,它包含一个字符串列,其中包含几个不同的4字符,可以用|&分隔,但并不总是这样。我试图将字典映射到每个4个字符的离散项,但遇到了问题。第23.4版

我尝试使用的基本代码:

df = df.replace(dict, regex=True)

或者尝试选择特定列:

df['Col'] = df['Col'].replace(dict, regex=True)

两者都会引发以下错误:

ValueError: The truth value of an array with more that one element is ambiguous. Use a.any() or a.all()

字典的值是类型list。这是执行.replace时的问题吗?你知道吗

用样本df和dict更新

 ID       Code
ABCD      00FQ
JKFA    8LK9|4F5H
QWST    2RLA|R1T5&8LK9


dict={'00FQ':['A','B'], '8LK9':['X'], '4F5H':['U','Z'], '2RLA':['H','K'], 'R1T5':['B','G'] }

dict中的元素将比dataframe中的元素多。你知道吗

更新预期输出

 ID       Code           Logic
ABCD      00FQ          ['A','B']
JKFA    8LK9|4F5H       ['X'] | ['U','Z']
QWST    2RLA|R1T5&8LK9  ['H','K'] | ['B','G'] & ['X']

总体目标是对两个数据帧执行这个替换,然后比较两边的ID's是否等价。你知道吗


Tags: 数据idtrue元素df字典codecol
2条回答

dict中定义的regex可能与数据帧的多行匹配,python对从dict中获取哪个替换值感到困惑

而且,当检查numpy数组的布尔值时,此错误将强制用户避免猜测。 如果

  • 它的任何一个元素都是真的或假的
  • 所有的元素都是真的 或者
  • 还有别的。你知道吗

因此,它抛出这个错误以允许程序员显式地提到它。你知道吗

请转到Here以获取更多说明。你知道吗

这里有一个函数,允许您解析字符串中的相关值:

def string_to_list(string):
    """
    parses a parent string for 4 character children strings
    returns a list of children strings
    """
    # instantiate values
    child = ''
    children = []

    if len(string)<4:
        return None

    for n in string:
        # skip if not wanted
        if n in ['|','&']:
            continue

        child+=n
        if len(child)==4:
            children.append(child)
            child = ''

    # finished
    return children

应用它来提取值列表,如下所示:

df['Code_List'] = df['Code'].apply(string_to_list)

映射到相关的logic值:

# Instantiate the dictionary of logic rules
logic_dict = {'00FQ':['A','B'], '8LK9':['X'], '4F5H':['U','Z'], '2RLA':['H','K'], 'R1T5':['B','G'] }

# Map the logic rules
df['Logic_List'] = df['Code_List'].apply(lambda arr: [logic_dict[x] for x in arr])

# Final output
    ID      Code            Code_List           Logic_List
0   ABCD    00FQ            [00FQ]              [[A, B]]
1   JKFA    8LK9|4F5H       [8LK9, 4F5H]        [[X], [U, Z]]
2   QWST    2RLA|R1T5&8LK9  [2RLA, R1T5, 8LK9]  [[H, K], [B, G], [X]]

相关问题 更多 >