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

CSV转Excel再转回CSV后部分数值逗号丢失,数值异常求助

解决分号CSV经Pandas+xlwings写入Excel后导出CSV数值失真问题

问题根源

你的原始CSV采用逗号作为小数点分隔符(欧洲地区常用格式),但Excel读取时错误将逗号识别为千位分隔符,导致带逗号的数值(如1,755345)被解析为整数1755345,后续导出CSV时就变成1755345,00,造成数值失真。同时你之前的代码中,通过iterrows修改DataFrame的方式无法真正生效,写入Excel时仍传递了数值类型,加剧了解析错误。

解决方案

方案1:直接按字符串读取第三列,保留原始格式

读取CSV时强制将目标列按字符串类型加载,确保原始格式完全保留,写入Excel时也按文本格式存储:

import pandas as pd
import xlwings as xw

# 读取CSV,指定分隔符为分号,第三列按字符串读取
QTH = pd.read_csv(
    r"C:/Users/A692517/PhytonStuff/testCSVtoExcel.csv",
    sep=';',
    dtype={'29221': str}  # 列名对应原始CSV的第三列标题"29221"
)

# 写入现有Excel工作簿
fn = "C:/Users/A692517/PhytonStuff/myClist.xlsx"
wb = xw.Book(fn)
ws = wb.sheets["Tabelle1"]

# 写入时指定第三列为文本格式,防止Excel自动解析
ws["A1"].options(
    pd.DataFrame,
    header=1,
    index=False,
    expand='table',
    dtype={'29221': str}
).value = QTH

wb.save(fn)
wb.close()

方案2:先正确解析数值,再转换为带逗号的字符串

如果需要对数值进行运算后再写入,可以先正确解析为浮点数,再转换为符合原始格式的字符串:

import pandas as pd
import xlwings as xw

# 读取CSV,指定小数点分隔符为逗号,正确解析数值
QTH = pd.read_csv(
    r"C:/Users/A692517/PhytonStuff/testCSVtoExcel.csv",
    sep=';',
    decimal=','
)

# 将数值转换为带逗号小数点的字符串格式
QTH['29221'] = QTH['29221'].apply(lambda x: f"{x}".replace('.', ','))

# 写入现有Excel工作簿
fn = "C:/Users/A692517/PhytonStuff/myClist.xlsx"
wb = xw.Book(fn)
ws = wb.sheets["Tabelle1"]

ws["A1"].options(
    pd.DataFrame,
    header=1,
    index=False,
    expand='table',
    dtype={'29221': str}
).value = QTH

wb.save(fn)
wb.close()

额外优化:写入后强制设置单元格格式

如果写入时格式设置不生效,可以在写入后将目标列强制设为文本格式:

# 写入DataFrame后添加该行代码
ws.range('C:C').number_format = '@'  # C列对应原始CSV的第三列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:15:40