鱼C论坛

 找回密码
 立即注册
查看: 850|回复: 4

[已解决]请问merge如何才能一个脚本合并n个数据

[复制链接]
发表于 2023-6-19 15:48:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大佬好,请问如何用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')


一直到月底,运行起来时间长,请赐教简单的方法,感谢。
最佳答案
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 = [str(i)+'.csv' for i in range(201, 209)]  # 根据你的实际情况修改

# 首先读取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))

这个脚本将大大简化你的代码,并提高了代码的可读性。希望这个答案对你有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 = [str(i)+'.csv' for i in range(201, 209)]  # 根据你的实际情况修改

# 首先读取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))

这个脚本将大大简化你的代码,并提高了代码的可读性。希望这个答案对你有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

而且文件名不知201到209,中间还得穿插其他文件,需要有顺序地读取写入。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-19 21:21:59 | 显示全部楼层
skyhouse 发表于 2023-6-19 16:38
首先谢谢大佬的解答,但这个答案不适合我。

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

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

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

ps: 如果方便可以上传csv等文件,让大家帮你试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-19 22:45:42 | 显示全部楼层
阿奇_o 发表于 2023-6-19 21:21
isdkz他这个办法应该是可以的(你说你之前试过,估计不是他这样)。

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

可以了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 19:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表