烧烤奶茶 2024-02-26 16:23 采纳率: 50%
浏览 5
已结题

Python代码合并不了数模国赛Excel

#想要合并4个Excel数据(数据是23年数模比赛数据),根据文件里面的公共列合并数据(四个文件里面都含有该列)
#报错情况
成功读取文件: 附件1.xlsx
读取文件 附件1.xlsx 失败,错误信息: '单品编码'
成功读取文件: 附件2.xlsx
读取文件 附件2.xlsx 失败,错误信息: '单品编码'
成功读取文件: 附件3.xlsx
读取文件 附件3.xlsx 失败,错误信息: '单品编码'
成功读取文件: 附件4.xlsx
#代码如下:

import pandas as pd
from openpyxl import Workbook
import os

# 定义要合并的Excel文件所在的文件夹路径 folder_path:文件夹路径
folder_path = 'D:/数据/国赛数据/'

# 获取文件夹中所有Excel文件的文件名 file_names:文件名  listdir:列表目录 endswith:以
file_names = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith('~$')]

# 创建一个空的DataFrame用于存储合并后的数据 merged_data:合并数据
merged_data = pd.DataFrame()

# 遍历每个Excel文件并读取数据(检查读取数据报错文件)
for file_name in file_names:
    file_path = os.path.join(folder_path, file_name)# 构建完整的文件路径 path:路径
    try:
        data = pd.read_excel(file_path, engine='openpyxl')#读取文件
        print(f"成功读取文件: {file_name}")

        # 检查并合并数据
        if '单品编码' in data.columns:
            merged_data = pd.merge(merged_data, data, on='单品编码', how='outer', sort=False)
        else:
            print(f"文件 {file_name} 中缺少'单品编码'列,无法进行合并")
    except Exception as e:
        print(f"读取文件 {file_name} 失败,错误信息: {str(e)}")

# 将合并后的数据保存到新的Excel文件中
output_path = 'D:/数据/国赛数据/合并版.xlsx'
merged_data.to_excel(output_path, index=False)

  • 写回答

4条回答 默认 最新

  • GISer Liu 2024-02-26 16:25
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的代码和报错信息,问题出在读取 Excel 文件时出现了错误。报错信息显示缺少了名为“单品编码”的列。
    解决这个问题的思路是:

    1. 确保所有 Excel 文件中都存在名为“单品编码”的列。
    2. 如果有缺失的列,可以选择跳过该文件或者进行其他处理。
    3. 修改代码以处理缺失列或者在出错时给出更具体的提示信息。
      以下是修改后的代码:
      pythonCopy code
      import pandas as pd
      import os
      # 定义要合并的Excel文件所在的文件夹路径
      folder_path = 'D:/数据/国赛数据/'
      # 获取文件夹中所有Excel文件的文件名
      file_names = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith('~$')]
      # 创建一个空的DataFrame用于存储合并后的数据
      merged_data = pd.DataFrame()
      # 遍历每个Excel文件并读取数据(检查读取数据报错文件)
      for file_name in file_names:
      file_path = os.path.join(folder_path, file_name)  # 构建完整的文件路径
      try:
      data = pd.read_excel(file_path, engine='openpyxl')  # 读取文件
      print(f"成功读取文件: {file_name}")
      # 检查并合并数据
      if '单品编码' in data.columns:
      merged_data = pd.concat([merged_data, data], ignore_index=True)
      else:
      print(f"文件 {file_name} 中缺少'单品编码'列,已跳过该文件")
      except Exception as e:
      print(f"读取文件 {file_name} 失败,错误信息: {str(e)}")
      # 将合并后的数据保存到新的Excel文件中
      output_path = 'D:/数据/国赛数据/合并版.xlsx'
      merged_data.to_excel(output_path, index=False)
      
      修改后的代码使用了pd.concat函数来合并数据,避免了依赖pd.merge函数的问题。此外,对于缺少“单品编码”列的文件,代码会输出提示信息并跳过该文件的处理。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 10月15日
  • 已采纳回答 10月7日
  • 创建了问题 2月26日