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

Pandas如何通过正则移除DataFrame前置特殊字符

问题根因

你看到的前置异常字符是UTF-8 BOM(字节顺序标记,字节序列为0xEF 0xBB 0xBF)被错误编码解析后生成的乱码。你当前代码中pd.read_csv传入的encoding='base64'是无效参数——base64是二进制转文本的编码格式,不是CSV文本读取支持的字符编码,这是乱码产生的直接原因。

解决方法

根源修复(推荐,无需正则)

不需要额外写正则清洗,只要把读取时的字符编码改成支持BOM自动识别的utf-8-sig,pandas会在读取阶段自动剥离BOM标记,从源头避免乱码,修改后的读取代码如下:

# 移除错误的encoding='base64'参数,替换为utf-8-sig
dt = pd.read_csv(StringIO(response.text), sep="|", encoding='utf-8-sig')

如果requests自动解码响应内容的逻辑有问题,直接取响应原始字节解码再读取,兼容性更好:

# 从响应原始字节解码,自动剥离BOM
decoded_content = response.content.decode('utf-8-sig')
dt = pd.read_csv(StringIO(decoded_content), sep="|")

正则清洗(已生成乱码DataFrame的补救方案)

如果已经生成了带乱码的DataFrame,可以通过正则批量清洗列名和所有字符串字段中的异常字符,步骤如下:

  • 编译正则规则,匹配所有位置出现的乱码序列
  • 先清洗DataFrame列名
  • 遍历所有字符串类型列,清洗字段内容

参考代码:

import re
import pandas as pd
from io import StringIO

# 定义清洗正则
clean_re = re.compile(r'')

# 清洗列名
dt.columns = [clean_re.sub('', str(col)).strip() for col in dt.columns]

# 清洗所有字符串列内容
str_columns = dt.select_dtypes(include=['object', 'string']).columns
for col in str_columns:
    dt[col] = dt[col].apply(
        lambda val: clean_re.sub('', str(val)) if pd.notna(val) else val
    )

提示:正则清洗属于事后补救手段,优先使用编码修正的方案,能避免其他潜在的乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:09:30