Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字典映射到dataframe中的部分字符串匹配_Python_Pandas - Fatal编程技术网

Python 将字典映射到dataframe中的部分字符串匹配

Python 将字典映射到dataframe中的部分字符串匹配,python,pandas,Python,Pandas,我有以下几点 ID Code ABCD 00FQ JKFA 8LK9|4F5H QWST 2RLA|R1T5&8LK9 我正在尝试将一个字典映射到代码的各个元素,其中的值是列表 字典看起来是这样的: d={'00FQ':"['A','B']", '8LK9':"['X']", '4F5H':"['U','Z']", '2RLA':"['H','K']", 'R1T5':"['B','G']" } 我想将这个dict映射到代码列中由|分隔的每个元素

我有以下几点

 ID       Code
ABCD      00FQ
JKFA    8LK9|4F5H
QWST    2RLA|R1T5&8LK9
我正在尝试将一个字典映射到代码的各个元素,其中的值是列表

字典看起来是这样的:

d={'00FQ':"['A','B']", '8LK9':"['X']", '4F5H':"['U','Z']", '2RLA':"['H','K']", 'R1T5':"['B','G']" } 
我想将这个dict映射到代码列中由|分隔的每个元素

结果df如下所示:

 ID       Code           Logic
ABCD      00FQ          ['A','B']
JKFA    8LK9|4F5H       ['X'] | ['U','Z']
QWST    2RLA|R1T5&8LK9  ['H','K'] | ['B','G'] & ['X']
IIUC拆分+替换+连接

更新

s=df.Code.str.split('|')
df['Logic']=['|'.join(d.get(y)for y in x) for x in s]
Out[229]: ["['A','B']", "['X']|['U','Z']", "['H','K']|['B','G']"]
op更改问题后更新更换日期2019-11-18

df.Code.replace(d,regex=True)
Out[376]: 
0                    ['A','B']
1              ['X']|['U','Z']
2    ['H','K']|['B','G']&['X']
Name: Code, dtype: object
IIUC拆分+替换+连接

更新

s=df.Code.str.split('|')
df['Logic']=['|'.join(d.get(y)for y in x) for x in s]
Out[229]: ["['A','B']", "['X']|['U','Z']", "['H','K']|['B','G']"]
op更改问题后更新更换日期2019-11-18

df.Code.replace(d,regex=True)
Out[376]: 
0                    ['A','B']
1              ['X']|['U','Z']
2    ['H','K']|['B','G']&['X']
Name: Code, dtype: object
你可以用

设置

代码

输出

其思想是首先使用函数r将字典中所有非| or&的值替换为相应的值。完成此操作后,使用由空格r'\1'包围的a本身替换每个|或(&O)

请注意,在替换repl参数的第一次调用中,是一个可调用的函数,这可以按照链接文档中的指定进行:

callable被传递给regex match对象,并且必须返回 要使用的替换字符串。见re.sub

注意:此解决方案假定每个可能的代码都在用于替换的字典中,如果不是这样,请将r更改为:

有关正则表达式的详细信息,请参见:

你可以用

设置

代码

输出

其思想是首先使用函数r将字典中所有非| or&的值替换为相应的值。完成此操作后,使用由空格r'\1'包围的a本身替换每个|或(&O)

请注意,在替换repl参数的第一次调用中,是一个可调用的函数,这可以按照链接文档中的指定进行:

callable被传递给regex match对象,并且必须返回 要使用的替换字符串。见re.sub

注意:此解决方案假定每个可能的代码都在用于替换的字典中,如果不是这样,请将r更改为:

有关正则表达式的详细信息,请参见:


然后我推荐循环:-@MaxB s=df.Code.str.split'|',这是新的s@MaxB我不知道你现在需要什么,好像你只需要一个替换,我已经更新了solution@MaxB我正在跟踪您的样本,我的所有解决方案都与您的样本数据配合良好,并产生预期的输出,因此,请将示例数据与实际数据帧进行比较,以查看different@MaxB我不这么认为,顺便说一句,dict应该是d={'00FQ':['A','B'],'8LK9':['X'],'4F5H':['U','Z'],'2RLA':['H','K'],'R1T5':['B','G']},然后我推荐循环:-@maxbs=df.Code.str.split'|'s@MaxB我不知道你现在需要什么,看来你只是需要一个替代品,我已经更新了solution@MaxB我正在关注您的示例,我的所有解决方案都与您的示例数据配合良好,并产生预期的输出,因此请将示例数据与您的实际数据帧进行比较,以查看结果different@MaxB我不这么认为,顺便说一句,这个单词应该是d={'00FQ':['A','B'],'8LK9':['X'],'4F5H':['U','Z'],'2RLA':['H','K'],'R1T5':['B','G']}@DanielMesejo Fixed,sry@DanielMesejo已修复,sryAttributeError:只能使用带字符串值的.str访问器,在pandas中使用np.object dtype,这让人困惑,因为我已经验证了该列是绝对类型str@MaxB回答中提供的设置是否出现错误?是的,我尝试将df简化为一个元素。您可以尝试:df['Logic']=df['Code'].astypestr.str.replace'[^ |和]+',r.astypestr.str.replace'[|和]“,r'\1'?我尝试了这一方法,但在df['Logic']AttributeError:的每一行中都得到了'nan',只能使用带字符串值的.str访问器,它在pandas中使用np.object uudtype,这很混乱,因为我已经验证了该列是绝对类型str@MaxB答案中提供的设置是否出现错误?是的,我也尝试过将df简化为一个元素。你能尝试一下吗:df['Logic']=df['Code'].astypestr.str.replace'[^ |&]+',r.astypestr.str.replace'[|&]',r'\1'。我尝试过这个方法,但df['Logic']每行都有'nan'
df['Logic'] = df['Code'].str.replace('[^|&]+', r).str.replace('([|&])', r' \1 ')
print(df)
     ID            Code                          Logic
0  ABCD            00FQ                      ['A','B']
1  JKFA       8LK9|4F5H              ['X'] | ['U','Z']
2  QWST  2RLA|R1T5&8LK9  ['H','K'] | ['B','G'] & ['X']
def r(w, d=d):
    """Function to be used for dictionary based replacement"""
    return d.get(w.group(), w.group())