gpt4 book ai didi

python - 替换单词和字符串 pandas

转载 作者:太空狗 更新时间:2023-10-29 21:49:13 27 4
gpt4 key购买 nike

    dataframe = pd.DataFrame({'Date':['This 1A1619 person BL171111 the A-1-24',
'dont Z112 but NOT 1-22-2001',
'mix: 1A25629Q88 or A13B ok'],
'IDs': ['A11','B22','C33'],
})

Date IDs
0 This 1A1619 person BL171111 the A-1-24 A11
1 dont Z112 but NOT 1-22-2001 B22
2 mix: 1A25629Q88 or A13B ok C33

我有上面的数据框。我的目标是替换所有没有连字符的混合单词/数字组合 - 例如1A1619IBL171111A13B 但不是 1-22-2001A-1-24 与字母 M。我试图通过 identify letter/number combinations using regex and storing in dictionary 使用下面的代码

dataframe['MixedNum'] = dataframe['Date'].str.replace(r'(?=.*[a-zA-Z])(\S+\S+\S+)','M') 

但是我得到了这个输出

                          Date              IDs     MixedNum
0 This 1A1619 person BL171111 the A-1-24 A11 M M M M M M M
1 dont Z112 but NOT 1-22-2001 B22 M M M M 1-22-2001
2 mix: 1A25629Q88 or A13B ok C33 M M or M ok

什么时候我真的想要这个输出

                          Date              IDs     MixedNum
0 This 1A1619 person BL171111 the A-1-24 A11 This M person M the A-1-24
1 dont Z112 but NOT 1-22-2001 B22 dont M but NOT 1-22-2001
2 mix: 1A25629Q88 or A13B ok C33 mix: M or M ok

我也尝试了这里建议的正则表达式,但它对我也不起作用 Regex replace mixed number+strings

谁能帮我修改我的正则表达式? r'(?=.*[a-zA-Z])(\S+\S+\S+

最佳答案

你可以使用

pat = r'(?<!\S)(?:[a-zA-Z]+\d|\d+[a-zA-Z])[a-zA-Z0-9]*(?!\S)'
dataframe['MixedNum'] = dataframe['Date'].str.replace(pat, 'M')

输出:

>>> dataframe
Date IDs MixedNum
0 This 1A1619 person BL171111 the A-1-24 A11 This M person M the A-1-24
1 dont Z112 but NOT 1-22-2001 B22 dont M but NOT 1-22-2001
2 mix: 1A25629Q88 or A13B ok C33 mix: M or M ok

图案细节

  • (?<!\S) - 空格或字符串开头应紧接在当前位置之前
  • (?:[a-zA-Z]+\d|\d+[a-zA-Z]) - 任何一个
    • [a-zA-Z]+\d - 1+ 个字母和一个数字
    • | - 或者
    • \d+[a-zA-Z] - 1 个以上的数字和一个字母
  • [a-zA-Z0-9]* - 0+ 个数字或字母
  • (?!\S) - 空格或字符串结尾应紧跟在当前位置之后。

关于python - 替换单词和字符串 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57661996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com