使用Pandas DataFrame清理网页抓取数据中的冗余字符
Pandas DataFrame 数据清理实现方案
针对你提到的三类数据清理需求,这里提供两种高效处理方式,优先推荐基于Pandas向量化字符串的方案(大数据集下效率更高),同时给出自定义函数方案适配特殊场景:
示例数据构造
先模拟待处理的数据集:
import pandas as pd data = { 'value': [ '1234-IN-5678', '5000000R (4000000)R', '9876-R-1357', 'IN-456789', '1000R (2000)IN', 'TEST-NODIGIT' # 模拟无数字的特殊情况 ] } df = pd.DataFrame(data)
方法一:链式向量化操作(推荐)
利用Pandas内置字符串方法,无需循环,处理效率更高:
# 核心清理逻辑 df['cleaned_value'] = (df['value'] # 移除多余字符:IN、R .str.replace(r'IN|R', '', regex=True) # 按"-"分割,保留前半部分内容 .str.split('-').str[0].str.strip() # 提取首个连续数值;若无数字则保留处理后的文本 .str.extract(r'(\d+)', expand=False) .fillna(df['value'] .str.replace(r'IN|R', '', regex=True) .str.split('-').str[0].str.strip()) )
步骤说明
- 移除冗余字符:用正则
IN|R匹配并删除所有"IN"和"R"字符 - 处理分隔符:按"-"分割字符串后取第一个元素,无"-"的内容会直接保留
- 提取数值:用
\d+匹配第一个连续数字序列;如果没有数字,用fillna保留处理后的文本内容
方法二:自定义函数(灵活适配特殊场景)
如果需要更个性化的逻辑,可通过apply调用自定义函数:
import re def clean_single_value(val): # 移除IN、R并去除首尾空格 temp = val.replace('IN', '').replace('R', '').strip() # 处理"-"分隔 if '-' in temp: temp = temp.split('-')[0].strip() # 提取首个数值,无数字则返回原处理文本 num_match = re.search(r'\d+', temp) return num_match.group() if num_match else temp df['cleaned_value'] = df['value'].apply(clean_single_value)
最终处理结果
两种方法得到的cleaned_value列结果一致:
| value | cleaned_value |
|---|---|
| 1234-IN-5678 | 1234 |
| 5000000R (4000000)R | 5000000 |
| 9876-R-1357 | 9876 |
| IN-456789 | 456789 |
| 1000R (2000)IN | 1000 |
| TEST-NODIGIT | TEST |
内容的提问来源于stack exchange,提问作者Donatus
相关产品推荐
相关产品推荐

