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

