pandas 在python中,是否有一个正则表达式模式可以根据不同的匹配更改不同的值

bvhaajcl  于 2022-11-27  发布在  Python
关注(0)|答案(3)|浏览(115)

我在data-frame column name = 'Name'中追加了一列,这是一个由几个不同列串联组成的字符串。
现在,我想用某些值替换某些字符。
& -〉且< ->小于

  • 〉大于' -〉这是撇号“-〉这是双引号
    现在,我如何才能有效地将这个正则表达式应用于整个列。此外,我可以把它放在某个函数中,因为我需要在其他4列中应用相同的。
    我试过这个
df = pd.DataFrame({'A': ['bat<', 'foo>', 'bait&'],
                   'B': ['abc', 'bar', 'xyz']})
df.replace({'A': r'<','A':r'>','A':r'&'}, {'A': 'less than','A': 'greater than','A': 'and'}, regex=True, inplace=True)

我期待着这个

A    B
0     batless than  abc
1     foogreater than  bar
2  baitand  xyz

但这件事发生了。

A    B
0     bat<  abc
1     foo>  bar
2  baitand  xyz
aurhwmvo

aurhwmvo1#

可以将pandas.DataFrame.apply与自定义lambda函数一起使用,如下所示使用pandas.Series.str.replace

regex = r'(<|>|&)'

df_new = df.apply(lambda x: x.str.replace(regex, lambda m: 'less than' if m.group(1) == '<' else 'greater than' if m.group(1) == '>' else 'and', regex=True))

[Out]:

                 A    B
0     batless than  abc
1  foogreater than  bar
2          baitand  xyz
oxf4rvwz

oxf4rvwz2#

您的替换dict有三个名为A的键,因此除最后一个键外,其他键都将被覆盖。请改用嵌套dict对一列进行多次替换:

df.replace({'A': {r'<': 'less than', r'>': 'greater than', r'&': 'and'}}, regex=True, inplace=True)

请参见pandi.DataFrame.replace

zkure5ic

zkure5ic3#

您可以使用字典进行Map,但它必须如下所示:

mapping = {'<': 'less than', '>': 'greater than', '&': 'and'}

然后,你可以将这些键编译成一个正则表达式,并按照Gonçalo Peres的回答进行操作:

df.apply(lambda col: col.str.replace("|".join(mapping), 
                                     lambda match: mapping.get(match.group())))

相关问题