如何提取Pandas列中的指定字符串片段并生成新列
实现方案
Pandas 内置了字符串正则提取方法,完全可以实现类似 SQL LIKE 的匹配效果,甚至灵活性更高,你可以用 str.extract() 配合正则表达式完成需求。
完整代码示例
import pandas as pd import numpy as np # 构造示例DataFrame d = {'col1': [1, 2,3,4,5,60,0,0,6,3,2,4], 'col3': [1, 22,33,44,55,60,1,5,6,3,2,4], 'Name': ['2a df a1asd_V1', 'xcd a2asd_V3','23vg aabsd_V1','dfgdf_aabsd_V0','a3as d_V1','aa bsd_V3','aasd_V4','aabsd_V4','aa_adn sd_V15',np.nan,'aasd_V12','aasd120Abs'], 'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']} dff = pd.DataFrame(data=d) # 提取第一个版本列(格式为V+数字),无匹配则留空 dff['Version'] = dff['Name'].str.extract(r'(V\d{1,2})$').fillna('') # 提取第二个版本列(格式为Version+空格+数字),无匹配则留空 dff['Version_Desc'] = ('Version ' + dff['Name'].str.extract(r'V(\d{1,2})$')).fillna('')
逻辑说明
- 正则表达式
r'(V\d{1,2})$'的作用:V匹配大写字母V\d{1,2}匹配1-2位数字,刚好覆盖V0到V20的需求范围$限定匹配必须在字符串末尾,避免匹配到字符串中间的V+数字内容- 括号为捕获组,
str.extract()会直接返回捕获组匹配到的内容
fillna('')会将未匹配到的结果、Name列为NaN的对应位置替换为空字符串,符合你的留空要求- 如果需要同时兼容小写v的场景,把正则改成
r'([Vv]\d{1,2})$'即可
内容的提问来源于stack exchange,提问作者rra
相关产品推荐
相关产品推荐

