冰菲 发表于 2023-11-23 15:07:50

Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,只保留首个表头

Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,并且只保留首个表头,代码如何写?

FishC_GPT 发表于 2023-11-23 15:08:26

你可以使用Python中的pandas库来实现这个功能。首先,需要安装pandas库,可使用以下命令进行安装:

pip install pandas

接下来,可以使用以下代码来合并多个工作表并保留首个表头:

import pandas as pd

# 读取第一个工作表,获取表头
df_first = pd.read_excel('your_file_name.xlsx', sheet_name=0, header=0)

# 合并后续工作表
dfs = pd.read_excel('your_file_name.xlsx', sheet_name=range(1, None))

df_merged = pd.concat(dfs, ignore_index=True)

# 将合并后的数据写入新的工作表
with pd.ExcelWriter('merged_file.xlsx') as writer:
    df_first.to_excel(writer, index=False, sheet_name='merged_sheet')
    df_merged.to_excel(writer, index=False, startrow=1, header=False, sheet_name='merged_sheet')

将你的Excel文件名替换为`your_file_name.xlsx`,执行以上代码后,将会生成一个名为`merged_file.xlsx`的新文件,其中包含合并后的工作表。合并后的工作表将从第二行开始,并且只保留首个表头。

请确保已经安装了pandas库,若未安装可通过运行`pip install pandas`进行安装。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

冰菲 发表于 2023-11-23 15:21:17

FishC_GPT 发表于 2023-11-23 15:08
你可以使用Python中的pandas库来实现这个功能。首先,需要安装pandas库,可使用以下命令进行安装:



不能单独选择文件名,一个文件夹里面有上百个工作簿

FishC_GPT 发表于 2023-11-23 15:21:54

冰菲 发表于 2023-11-23 15:21
不能单独选择文件名,一个文件夹里面有上百个工作簿

如果你想合并一个文件夹里的上百个工作簿,可以使用Python的os库来获取文件夹中的所有Excel文件。以下是一个示例代码:

import os
import pandas as pd

# 设置文件夹路径
folder_path = 'your_folder_path'

# 读取文件夹中的所有Excel文件
all_files = os.listdir(folder_path)
excel_files =

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

# 遍历每个Excel文件,合并数据
for file in excel_files:
    file_path = os.path.join(folder_path, file)
    df = pd.read_excel(file_path, header=1) # 从第二行开始读取数据,保留首个表头
    merged_data = merged_data.append(df)

# 将合并后的数据写入新的工作簿
merged_file_path = os.path.join(folder_path, 'merged_file.xlsx')
with pd.ExcelWriter(merged_file_path) as writer:
    merged_data.to_excel(writer, index=False, sheet_name='merged_sheet')

print('合并完成!')

请将代码中的`your_folder_path`替换为你想要合并的文件夹的路径,并确保文件夹中只包含Excel文件。执行以上代码后,将会在指定的文件夹中生成一个名为`merged_file.xlsx`的新文件,其中包含了合并后的工作表数据。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

冰菲 发表于 2023-11-23 15:23:51

path='C:/Users/EDY/Desktop/文件'
files_list=os.listdir(path)    #获取目标文件夹内各文件的名称
new_wb=Workbook()    #新建表格
new_ws=new_wb.active    #获取工作簿
for file in files_list:    #循环获取各表的名称
    file_path=path+'/'+file    #获取表格的路径
    wb=load_workbook(file_path)    #打开表格
    ws=wb.active    #打开工作簿
    for row in ws.iter_rows(min_row=2,values_only=True):    #循环获取表头以外的表格内容,从第15行开始
      new_ws.append(row)    #获取的内容写入新表

new_wb.save("最终完整版/2023.11.23.xlsx")    #保存表格


如果从第二行开始,就没有抬头,如果从第一行开始,合并后有多个抬头

FishC_GPT 发表于 2023-11-23 15:24:32

冰菲 发表于 2023-11-23 15:23
path='C:/Users/EDY/Desktop/文件'
files_list=os.li ...

根据你提供的代码和要求,你可以尝试以下修改。在循环处理每个表格之前,先添加一个条件判断来决定是否给新表格添加首个表头。如果是第一个表格,将表头也写入新表格,如果是后续的表格,则跳过表头。以下是修改后的代码示例:

from openpyxl import load_workbook, Workbook
import os

path = 'C:/Users/EDY/Desktop/文件'
files_list = os.listdir(path)

new_wb = Workbook()# 新建表格
new_ws = new_wb.active# 获取工作簿

for i, file in enumerate(files_list):
    file_path = path + '/' + file
    wb = load_workbook(file_path)
    ws = wb.active
   
    for j, row in enumerate(ws.iter_rows(min_row=1 if i == 0 else 2, values_only=True)):
      if i == 0 or j > 0:# 第一个表格或后续表格中的非首行数据
            new_ws.append(row)

new_wb.save("最终完整版/2023.11.23.xlsx")# 保存表格

这段代码会在新表格中合并所有工作簿的数据,并且只保留首个表头。请确保你已经安装了openpyxl库,可使用`pip install openpyxl`命令进行安装。注意,如果从第二行开始合并,那么合并后的表格将没有表头行。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

冰菲 发表于 2023-11-23 15:33:06

for j, row in enumerate(ws.iter_rows(min_row=1 if i == 0 else 2, values_only=True)):


1和2改0和1就对了

FishC_GPT 发表于 2023-11-23 15:33:52

冰菲 发表于 2023-11-23 15:33
for j, row in enumerate(ws.iter_rows(min_row=1 if...

非常抱歉,之前的代码有一处错误。根据你的要求,需要将代码中的1和2改为0和1。以下是修改后的代码示例:from openpyxl import load_workbook, Workbookimport ospath = 'C:/Users/EDY/Desktop/文件'files_list = os.listdir(path)new_wb = Workbook()# 新建表格new_ws = new_wb.active# 获取工作簿for i, file in enumerate(files_list):    file_path = path + '/' + file    wb = load_workbook(file_path)    ws = wb.active      for j, row in enumerate(ws.iter_rows(min_row=0 if i == 0 else 1, values_only=True)):      if i == 0 or j > 0:# 第一个表格或后续表格中的非首行数据            new_ws.append(row)new_wb.save("最终完整版/2023.11.23.xlsx")# 保存表格现在代码中,如果是第一个表格,将从第0行开始读取数据,并且保留首个表头。如果是后续的表格,将从第1行开始读取数据,并且跳过表头。最终合并后的表格将只保留首个表头。再次对之前的错误表示抱歉,并感谢你的指正。希望这次的代码修改能满足你的需求。请确保已经安装了openpyxl库,可使用`pip install openpyxl`命令进行安装。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

冰菲 发表于 2023-11-23 16:04:57

没事,我改完就可以运行了 ,也谢谢你提供的代码

FishC_GPT 发表于 2023-11-23 16:05:09

冰菲 发表于 2023-11-23 16:04
没事,我改完就可以运行了 ,也谢谢你提供的代码

不客气!很高兴能够帮到你。如果还有其他问题,欢迎随时提问。祝你编程愉快!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,只保留首个表头