You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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())
                      )

步骤说明

  1. 移除冗余字符:用正则IN|R匹配并删除所有"IN"和"R"字符
  2. 处理分隔符:按"-"分割字符串后取第一个元素,无"-"的内容会直接保留
  3. 提取数值:用\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列结果一致:

valuecleaned_value
1234-IN-56781234
5000000R (4000000)R5000000
9876-R-13579876
IN-456789456789
1000R (2000)IN1000
TEST-NODIGITTEST

内容的提问来源于stack exchange,提问作者Donatus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:21:28