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
相关产品推荐
相关产品推荐

