这是我的数据集:
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))。
