Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,只保留首个表头
Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,并且只保留首个表头,代码如何写?你可以使用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官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-23 15:08
你可以使用Python中的pandas库来实现这个功能。首先,需要安装pandas库,可使用以下命令进行安装:
不能单独选择文件名,一个文件夹里面有上百个工作簿 冰菲 发表于 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官方接口),如未能正确解答您的问题,请继续追问。 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") #保存表格
如果从第二行开始,就没有抬头,如果从第一行开始,合并后有多个抬头 冰菲 发表于 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官方接口),如未能正确解答您的问题,请继续追问。 for j, row in enumerate(ws.iter_rows(min_row=1 if i == 0 else 2, values_only=True)):
1和2改0和1就对了 冰菲 发表于 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
没事,我改完就可以运行了 ,也谢谢你提供的代码
不客气!很高兴能够帮到你。如果还有其他问题,欢迎随时提问。祝你编程愉快!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]