一般的方式
将列表存入dataframe对象,并将df拆分,分批次写入excel里面。
这种方法并不快,不如直接将整个dataframe对象写入excel。
import pandas as pd
def write_batches_to_excel(data, batch_size, filename):
"""
将数据分批写入Excel文件。
:param data: 二维列表,其中每个子列表代表一行数据
:param batch_size: 每个批次包含的数据行数
:param filename: 输出Excel文件的名称
"""
writer = pd.ExcelWriter(filename)
for i in range(0, len(data), batch_size):
# 获取当前批次的数据
batch_data = data[i:i + batch_size]
# 将批次数据转换为DataFrame
df = pd.DataFrame(batch_data)
# 第一次写入时包含表头
if i == 0:
df.to_excel(writer, sheet_name='Sheet1', index=False, header=False)
else:
df.to_excel(writer, sheet_name='Sheet1', index=False, header=False, startrow=writer.sheets['Sheet1'].max_row)
writer.close()
# 示例用法
data = [
['A0', 'B0', 'C0'],
['A1', 'B1', 'C1'],
['A2', 'B2', 'C2'],
['A3', 'B3', 'C3'],
['A4', 'B4', 'C4'],
['A5', 'B5', 'C5'],
['A6', 'B6', 'C6'],
['A7', 'B7', 'C7'],
]
batch_size = 3
filename = "D:\\desktop\\1234.xlsx"
write_batches_to_excel(data, batch_size, filename)
更快的方式
首先将原始数据拆分成多个CSV文件,然后将这些CSV文件合并到一个dataframe对象,再写入excel。
这种方法虽然快一些,但是多个CSV文件是多余的,如果要删除话,还需要花费时间。
import pandas as pd
import os
temporaryFolderPath='D:\\desktop\\new'
targetFilePath='D:\\desktop\\combined_output22.xlsx'
# 假设我们有一个大的列表
header_list=['Column1', 'Column2', 'Column3']
big_list = [
['A0', 'B0', 'C0'],
['A1', 'B1', 'C1'],
['A2', 'B2', 'C2'],
['A3', 'B3', 'C3'],
['A4', 'B4', 'C4'],
['A5', 'B5', 'C5'],
['A6', 'B6', 'C6'],
['A7', 'B7', 'C7'],
]
# big_list = list(range(1, 10001)) # 这个列表有10000个元素
def split_data_to_csv_and_merge_to_excel(temporaryFolderPath,targetFilePath,big_list,header_list):
# 将列表转换为DataFrame
df = pd.DataFrame(big_list)
# 按每5000行拆分
chunk_size = 4999
chunks = [df[i:i+chunk_size] for i in range(0, df.shape[0], chunk_size)]
# 创建一个空列表用于存储CSV文件的路径
csv_file_paths = []
# 写入CSV文件
for i, chunk in enumerate(chunks):
# 生成CSV文件的完整路径
csv_path = f'{temporaryFolderPath}\\output_{i}.csv'
chunk.to_csv(csv_path, index=False,header=header_list)
csv_file_paths.append(csv_path)
# 读取CSV文件并将它们合并到一个DataFrame
combined_df = pd.concat([pd.read_csv(f'{temporaryFolderPath}\\output_{i}.csv') for i in range(len(chunks))])
# 将合并后的DataFrame写入Excel文件
combined_df.to_excel(targetFilePath, index=False,header=header_list)
# 删除原始的CSV文件
for file in csv_file_paths:
os.remove(file)
split_data_to_csv_and_merge_to_excel(temporaryFolderPath,targetFilePath,big_list,header_list)
目前发现最快的方式
先将列表写入csv,从csv写入到excel。
import pandas as pd
import os
import time
def save_to_csv_and_csv_to_excel(big_list,header_list,csv_file, excel_file, sheet_name='Sheet1'):
start_time = time.time()
# 将列表转换为DataFrame
df = pd.DataFrame(big_list)
#直接导出csv文件
df.to_csv(csv_file, index=False,header=header_list)
# 读取 CSV 文件
df = pd.read_csv(csv_file)
# 将 DataFrame 写入 Excel 文件
with pd.ExcelWriter(excel_file, engine='openpyxl') as writer:
# 使用 Pandas 的 to_excel 方法直接写入数据
df.to_excel(writer, sheet_name=sheet_name, index=False)
os.remove(csv_file)
print(f"Execution took {time.time() - start_time:.2f} seconds")
# 假设我们有一个大的列表
header_list=['Column1', 'Column2', 'Column3']
big_list=[[i, i, i] for i in range(1, 120001)]
csv_file='D:\\desktop\\new\\临时.csv'
excel_file='D:\\desktop\\new\\combined_output.xlsx'
# 将 CSV 文件写入到 Excel 文件
save_to_csv_and_csv_to_excel(big_list,header_list,csv_file, excel_file, sheet_name='Sheet1')