如何导出Pandas DataFrame到CSV时避免科学计数法显示?
解决方案
要解决Excel打开CSV时将带前导零的数字字符串转为科学计数法的问题,核心是让Excel识别这类内容为文本格式而非数值。以下是精准且无需手动修改CSV的实现方法:
步骤1:读取Excel时保留原字符串格式
读取Excel文件时,必须指定目标列为字符串类型,避免Pandas自动将带前导零的字符串转为数值导致前导零丢失:
import pandas as pd import csv import re # 替换'目标列名'为实际列名,确保该列以字符串类型读取 df = pd.read_excel('input.xlsx', dtype={'目标列名': str})
步骤2:为带前导零的数字字符串添加Excel文本标识
对目标列中符合条件的单元格(纯数字字符串且以0开头、长度大于1),用="内容"格式包裹。Excel打开时会自动解析为文本内容,不会显示外层的=和"",同时避免转为科学计数法:
def format_leading_zero(content): # 匹配以0开头且后续为数字的字符串(排除单个0的情况) if re.fullmatch(r'0\d+', content): return f'="{content}"' # 非目标内容直接返回原字符串 return content # 将处理逻辑应用到目标列 df['目标列名'] = df['目标列名'].apply(format_leading_zero)
步骤3:导出CSV时避免额外转义
导出CSV时关闭自动引号功能,防止Pandas对我们手动添加的""进行额外转义:
df.to_csv('output.csv', index=False, quoting=csv.QUOTE_NONE, escapechar='\\')
原理说明
="0123456789"格式是Excel的特殊语法,会被识别为“显示引号内的文本”,既保留原字符串内容,又强制Excel以文本格式解析,不会触发科学计数法转换。- 仅对带前导零的纯数字字符串做处理,不影响列中的非数值内容或正常数字(如"123"、"abc123"等)。
内容的提问来源于stack exchange,提问作者jfordummies
相关产品推荐
相关产品推荐

