Skip to main content
 首页 » 编程设计

python之将正则表达式应用于 df 在新列中添加值

2025年02月15日41xiaohuochai

这是我的数据集:

BlaBla 128 MB EE 
ADTD 6 gb DTS 
EEEDC 2GB RS 
STA 12MB DFA 
BBNB 32 mb YED 

我想从这个数据集中提取 MB/GB 的数量和单位 MB/GB。因此我创建了以下正则表达式:

(\d*)\s?(MB|GB) 

我创建的用于将正则表达式应用于我的 df 的代码是:

pattern = re.compile(r'(\d*)\s?(MB|GB)') 
invoice_df['mbs'] = invoice_df['Rate Plan'].apply(lambda x: pattern.search(x).group(1)) 
invoice_df['unit'] = invoice_df['Rate Plan'].apply(lambda x: pattern.search(x).group(2)) 

然而,当将正则表达式应用于我的 df 时,它会给出以下错误消息:

AttributeError: 'NoneType' object has no attribute 'group' 

我该怎么做才能解决这个问题?

请您参考如下方法:

由于某些条目可能没有匹配项,因此 re.search 对它们失败(不返回匹配项)。您需要考虑 lambda 中的这些情况:

apply(lambda x: pattern.search(x).group(1) if pattern.search(x) else "") 

我也建议使用

(?i)(\d+)\s*([MGK]B) 

它将找到 1+ 个数字(\d+,第 1 组)后跟 0+ 个空格(\s*)并将匹配 KB、GB、MB 以不区分大小写的方式放入第 2 组 (([MGK]B))。