[問題] 利用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