You need to enable JavaScript to run this app. Pandas DataFrame批量转换形如="XXX"的公式样式为实际值的方法
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame批量转换形如="XXX"的公式样式为实际值的方法

Pandas 批量转换CSV内Excel格式残留="xxx"值的实现方法

这类值是Excel导出CSV时的公式格式遗留,结构特征非常固定:整体以等号开头,双引号包裹实际存储的文本内容,没有其他嵌套字符。处理时直接通过正则精准匹配该结构,提取引号中间的纯文本即可,全程使用Pandas原生矢量化操作实现,不需要逐单元格循环遍历,大表场景下也能保证处理性能。

可直接复用的实现代码

场景1:需要保留所有列的文本格式(最常用,避免前导零丢失)

读入CSV时强制将所有列识别为字符串类型,从根源上避免Pandas自动把010这类纯文本值转成整数10、丢失前导零的问题,再通过全表正则匹配完成批量替换:

import pandas as pd

# 读入CSV,所有列按文本类型加载
df = pd.read_csv("目标文件.csv", dtype=str)

# 全表批量匹配替换
df = df.replace(
    to_replace=r'^="([^"]*)"$',
    value=r'\1',
    regex=True
)

代码说明:

  • 正则规则^="([^"]*)"$严格限定匹配范围:从字符串开头的="开始,到结尾的"结束,提取过程中直接抓取两个引号中间、不包含嵌套双引号的所有内容,完全贴合目标残留格式,不会误替换单元格内的其他正常文本
  • 替换值用\1直接引用正则提取的中间内容,最终输出为去掉等号、去掉外层引号的纯文本结果,比如把="010"直接转换为010

场景2:保留原有列类型,仅对存在残留值的字符串列做处理

如果原始CSV包含数值列、日期列,不需要把全列强制转成字符串,就单独筛选所有字符串类型的列做匹配替换:

# 遍历筛选出的所有字符串类型列
for col in df.select_dtypes(include="object").columns:
    df[col] = df[col].str.replace(r'^="([^"]*)"$', r'\1', regex=True)

关键注意事项

  • 不要在匹配处理前把包含010、011这类保留前导零的列转回数值类型,否则前导零会被自动清除,无法得到符合格式要求的纯文本结果
  • 正则必须加上开头^、结尾$的边界限定,避免误替换单元格内夹杂其他正常文本的内容
  • 该方法对十万行以上规模的大表处理速度远快于逐单元格遍历的applymap写法,不存在明显的性能瓶颈

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 14:45:04