[问题] 利用pandas合并xlsx档案的问题

楼主: daisybubble (黛西泡泡)   2021-07-01 10:35:57
各位前辈大家好~
手上有个专案希望能达成自动化
首先是我会收到来自其他人的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做修改吗?
还是只能用别的方式呢?
非常感谢大家!!
作者: cjtv (小当家)   2021-07-01 11:23:00
如果在newdata2可以loc出你要的WW的话,在for i in add_sheet:后多写两个if循环如何?
作者: poototo (poototo)   2021-07-01 12:48:00
这就基本的资料清洗,练习df的操作吧
作者: kane111 (kane)   2021-07-01 16:37:00
两个excel都用pandas读进来,各自做完资料处理后,再用pd.merge或pd.concat来合并
楼主: daisybubble (黛西泡泡)   2021-07-01 17:09:00
谢谢大家的回复~已尝试针对newdata做资料清理后已可成功合并 谢谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com