基于gramaz表删除订单中指定单位及前置数字的Pandas预处理需求
解决方案
可以通过正则表达式结合Pandas的字符串处理方法高效实现需求,针对1万行数据的处理速度完全够用。
实现步骤
- 从
gramazDataFrame中提取需删除的单位,构建正则匹配的备选模式 - 编写正则规则,精准匹配两类目标内容:
- 紧邻单位前的数字(含空格)+ 目标单位,例如
2 gr、100 lit - 单独的目标单位(前面带空格),例如
cc
- 紧邻单位前的数字(含空格)+ 目标单位,例如
- 执行替换后清理多余空格,保证文本格式整洁
代码示例
import pandas as pd gramaz = pd.DataFrame({'unit':['cc', 'lit','gr', 'kg' ]}) order = pd.DataFrame({'order':['100 glass','8 sodium 2 gr', 'br kk cc','mgk 100 lit','red pepper', 'black pepper', 'a 10 kg' ]}) # 构造正则匹配的单位备选模式 units_pattern = '|'.join(gramaz['unit']) # 正则规则:匹配「数字+空格+单位」或「空格+单位」 regex_pattern = r'\d+\s+(?:{})|\s+(?:{})'.format(units_pattern, units_pattern) # 执行替换并清理空格 order['order'] = order['order'].str.replace(regex_pattern, '', regex=True) \ .str.replace(r'\s+', ' ', regex=True) \ .str.strip() print(order)
输出结果
order 0 100 glass 1 8 sodium 2 br kk 3 mgk 4 red pepper 5 black pepper 6 a
正则规则说明
\d+:匹配1个及以上数字\s+:匹配1个及以上空格(?:{}):非捕获组,用于包裹备选单位,避免生成不必要的分组|:逻辑或,匹配两种模式中的任意一种
该方法精准定位需删除的内容,不会误删订单中其他位置的数字,处理效率适配1万行规模的数据。
内容的提问来源于stack exchange,提问作者Sadcow
相关产品推荐
相关产品推荐

