python - 替换单词和字符串 pandas
问题描述
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
我有上面的数据框。我的目标是用字母替换所有没有连字符的混合单词/数字组合,-
例如1A1619I
or BL171111
orA13B
但 NOT 1-22-2001
or 。我试图通过使用正则表达式识别字母/数字组合并存储在字典中来使用下面的代码A-1-24
M
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
我也尝试了这里建议的正则表达式,但它对我也不起作用正则 表达式替换混合数字+字符串
谁能帮我改变我的正则表达式? 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)
- 空格或字符串结尾应立即跟在当前位置之后。
推荐阅读
- php - 如果我在通过 Laravel Eloquent 的 UpdateOrCreate 方法更新时发送空白数据,如何保留以前插入的数据?
- php - 用 SVG 处理的 CSV 数据
- admin-on-rest - react-admin:列表组件中的自定义用户过滤器
- java - 如何压缩和调整位图大小?
- php - 使用 passthru 跳过代理的 MP4 文件
- asp.net - neo4client 合并并不总是有效
- android - java.lang.RuntimeException:布局不能为空
- javascript - XMLHTTP 请求:即使在节流限制下也有太多请求
- amp-html - 修复 AMP 样式表错误
- exception - 在 Perl 6 中,如何打印可能在编译时抛出的异常类型?