作者daisybubble (黛西泡泡)
看板Python
标题[问题] 利用pandas合并xlsx档案的问题
时间Thu Jul 1 10:35:57 2021
各位前辈大家好~
手上有个专案希望能达成自动化
首先是我会收到来自其他人的xlsx档案(名称假设为new_data.xlsx)
接着要把里面的资料腾到一个「汇总表.xlsx」
目前都是以满人工的方式处理
因此尝试用pandas写了个自动合并资料的程式
但只适用在「new_data.xlsx」跟「汇总表.xlsx」栏位名称一致的情形下
范例:
汇总表.xlsx
https://imgur.com/a/JaToUuv (5个column)
new_data.xlsx
https://imgur.com/q4Mf0ho (一样5个column)
另因new_data.xlsx的WW Revenue栏位是千位表示,所以贴进汇总表要乘以1,000
两个档案合并後会长这样
https://imgur.com/a/eKRRmG9
我的code如下:
import pandas as pd
import xlrd
df_check = xlrd.open_workbook("new_data.xlsx")
sheet_check = df_check.sheet_names()
'''因new_data.xlsx可能不只一个sheet要汇入汇总表,
故先建立sheet_check的list把所有在new_data.xlsx的sheet名称存起来'''
add_sheet = []
while True:
a = input("Please enter the sheet name to be combined (Enter N when
finished): ")
if a in sheet_check:
add_sheet.append(a)
elif a == "N":
break
else:
print("No such sheet! Please enter sheet name again.")
'''让使用者输入要汇入汇总表的sheet名称,当输入N时跳出回圈;输入非在new_data.xlsx
内的sheet名称时跑else'''
database = pd.read_excel("汇总表.xlsx")
#读取汇总表
df = pd.read_excel("new_data.xlsx", sheet_name = add_sheet)
#读取使用者想要汇入汇总表的sheets
for i in add_sheet:
df[i]["WW Revenue"] = df[i]["WW Revenue"] * 1000 #汇入前WW Reveune先乘千
df_combined = database.append(pd.DataFrame(data = df[i]),
ignore_index=True)
database = df_combined
print df_combined)
df_combined.to_excel("finished_database.xlsx", index = False)
===========================================================================
在栏位名称相同的情形下这样都没问题,但我目前遇到2个问题:
new_data的栏位跟汇总表不同:
https://imgur.com/a/hUXcwb6
(1)栏位名称从row2开始 (且row2 and row3为合并储存格形式)
(2)Volume跟Revenue有包含美国跟台湾,以及两者加总(WW),
输入汇总表我仅需要WW的数值。
(也就是此new_data G栏存入汇总表Volume栏位、
J栏乘以1,000後存入汇总表WW Revenue栏位)
请问有办法对於我现有的code做修改吗?
还是只能用别的方式呢?
非常感谢大家!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 58.114.222.11 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1625106959.A.BD2.html
※ 编辑: daisybubble (58.114.222.11 台湾), 07/01/2021 10:40:07
1F:推 cjtv: 如果在newdata2可以loc出你要的WW的话,在for i in add_shee 07/01 11:23
2F:→ cjtv: t:後多写两个if回圈如何? 07/01 11:23
3F:推 poototo: 这就基本的资料清洗,练习df的操作吧 07/01 12:48
4F:推 kane111: 两个excel都用pandas读进来,各自做完资料处理後,再用p 07/01 16:37
5F:→ kane111: d.merge或pd.concat来合并 07/01 16:37
6F:→ daisybubble: 谢谢大家的回覆~已尝试针对newdata做资料清理後 07/01 17:09
7F:→ daisybubble: 已可成功合并 谢谢! 07/01 17:09