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

Python3.9+Pandas互转xlsx与csv时€符号丢失问题求解

修复CSV与XLSX互转时€符号丢失的问题

问题原因

  1. CSV转XLSX场景:Pandas默认会尝试解析包含数字的字符串为数值类型,当内容是5€这类数字在前、符号在后的格式时,解析器会自动剥离末尾的非数字字符,只保留数值5。
  2. XLSX转CSV场景:如果XLSX中带€的单元格是通过自定义格式(如0"€")设置的,Pandas读取的是单元格底层的数值,而非显示的完整文本5€,导致导出CSV时丢失符号。

解决方案

针对两种转换场景分别调整代码,确保带€的内容被完整保留:

1. CSV转XLSX:强制保留原始文本格式

读取CSV时,指定所有列的类型为字符串,避免Pandas自动解析数值剥离€符号;如果需要保留部分列的数值类型,可以针对性设置dtype或使用converters。

2. XLSX转CSV:读取单元格显示值而非底层数值

使用openpyxl直接读取单元格的显示文本,确保自定义格式的带€内容被完整提取。

修改后的完整代码

import os
import pandas as pd
from openpyxl import load_workbook

for file_path in self.input_files:
    file_name, file_ext = os.path.splitext(file_path)
    output_file = os.path.join(self.output_folder, os.path.basename(file_name))

    if file_ext.lower() == '.csv':
        output_file += '.xlsx'
        # 强制所有列为字符串类型,保留原始文本
        df = pd.read_csv(
            file_path,
            delimiter=';',
            quotechar='"',
            decimal=',',
            encoding='utf-8-sig',
            dtype=str  # 关键:避免自动解析数值剥离€
        )
        df.to_excel(output_file, index=False)
    elif file_ext.lower() == '.xlsx':
        output_file += '.csv'
        # 使用openpyxl读取单元格显示值
        wb = load_workbook(file_path, data_only=False)  # data_only=False才能读取显示值
        ws = wb.active
        
        # 读取表头
        headers = [cell.value for cell in ws[1]]
        # 读取所有行的显示文本
        rows_data = []
        for row in ws.iter_rows(min_row=2):
            row_values = [cell.display_value for cell in row]
            rows_data.append(row_values)
        
        df = pd.DataFrame(rows_data, columns=headers)
        df.to_csv(
            output_file,
            index=False,
            sep=';',
            quotechar='"',
            decimal=',',
            float_format='%.15g',
            encoding='utf-8-sig'
        )

补充说明

  • 如果CSV中只有部分列包含€符号,可以不用全局设置dtype=str,而是通过converters指定特定列,例如:converters={'金额列': str},这样既保留€符号,又不影响其他数值列的解析。
  • 若XLSX中的€是直接输入的文本(而非自定义格式),则原代码中pd.read_excel即可正常读取,无需改用openpyxl。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:44:56