skyhouse 发表于 2023-6-19 15:48:21

请问merge如何才能一个脚本合并n个数据

各位大佬好,请问如何用merge合并多个execl文件。
我只会用笨方法,感觉比较麻烦,能否有简单的方法,请赐教。

import pandas as pd
import numpy as np
import shutil
import os
from os import path
import xlwt
import openpyxl


df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//201.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//202.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//203.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//204.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//205.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//206.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//207.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')

df1 = pd.read_excel('E://计算数据//数据2月份.xlsx', index_col=0)
df2 = pd.read_csv('E://计算数据//208.csv', index_col=0,encoding='gb2312')
df = pd.merge(df1, df2, on='产品名称', how='left')
df.to_excel('E://计算数据//数据2月份.xlsx')


一直到月底,运行起来时间长,请赐教简单的方法,感谢。

isdkz 发表于 2023-6-19 16:21:01

可以使用循环和列表来简化你的代码。具体来说,你可以创建一个文件名列表,然后使用循环一次处理每个文件。下面是一个示例脚本:

import pandas as pd
import os

# 假设你需要合并的所有csv文件都在同一个文件夹中,并且文件名依次为"201.csv", "202.csv", ..., "208.csv"等
folder_path = 'E://计算数据//'
excel_file = '数据2月份.xlsx'
csv_files = # 根据你的实际情况修改

# 首先读取excel文件
df = pd.read_excel(os.path.join(folder_path, excel_file), index_col=0)

# 循环读取每个csv文件,并与excel文件进行合并
for csv_file in csv_files:
    df2 = pd.read_csv(os.path.join(folder_path, csv_file), index_col=0, encoding='gb2312')
    df = pd.merge(df, df2, on='产品名称', how='left')

# 将合并后的数据保存到excel文件中
df.to_excel(os.path.join(folder_path, excel_file))


这个脚本将大大简化你的代码,并提高了代码的可读性。希望这个答案对你有所帮助!

skyhouse 发表于 2023-6-19 16:38:35

isdkz 发表于 2023-6-19 16:21
可以使用循环和列表来简化你的代码。具体来说,你可以创建一个文件名列表,然后使用循环一次处理每个文件。 ...

首先谢谢大佬的解答,但这个答案不适合我。

我之前试过,假如每个循环不保存一次,再读取一次的话,每次的df都是原始的df。最后会出现原始的df+最后一个csv的内容。

而且文件名不知201到209,中间还得穿插其他文件,需要有顺序地读取写入。

阿奇_o 发表于 2023-6-19 21:21:59

skyhouse 发表于 2023-6-19 16:38
首先谢谢大佬的解答,但这个答案不适合我。

我之前试过,假如每个循环不保存一次,再读取一次的话,每 ...

isdkz他这个办法应该是可以的(你说你之前试过,估计不是他这样)。

而如果你的201-209这些文件有特定的(特别的顺序),那你可以手动写到一个列表里,或特定排序逻辑可以先sort排序一下。其他基本还是isdkz那样做。

ps: 如果方便可以上传csv等文件,让大家帮你试试。

skyhouse 发表于 2023-6-19 22:45:42

阿奇_o 发表于 2023-6-19 21:21
isdkz他这个办法应该是可以的(你说你之前试过,估计不是他这样)。

而如果你的201-209这些文件有特 ...

可以了,谢谢
页: [1]
查看完整版本: 请问merge如何才能一个脚本合并n个数据