我試圖了解如何添加到當前腳本中,以便在作業表級別進行更改。我希望能夠從我的平面檔案中的作業表中洗掉列。例如,如果一列名為“公司”,我想將其洗掉,以便我的最終 wb.save 洗掉這些列。我有多個列名,我想從 wb 中的所有作業表中洗掉-
cols_to_drop = ['Company','Type','Firstname','lastname']
到目前為止,我設法從檔案中洗掉特定作業表并更新 colnames 的代碼如下 -
from openpyxl import load_workbook
import os
column_name_update_map = {'LocationName': 'Company Name','StreetAddress':'Address','City':'City','State':'State',
'Zip':'Zip','GeneralPhone':'Phone Number','GeneralEmail':'Email','DateJoined':'Status Date',
'Date Removed':'Status Date'}
for file in os.listdir("C:/Users/hhh/Desktop/aaa/python/Matching"):
if file.startswith("TVC"):
wb = load_workbook(file)
if 'Opt-Ins' in wb.sheetnames:
wb.remove(wb['Opt-Ins'])
wb.remove(wb['New Voting Members'])
wb.remove(wb['Temporary Members'])
for ws in wb:
for header in next(ws.rows):
try:
header.value = column_name_update_map[header.value]
except KeyError:
pass
wb.save(file " (updated headers).xlsx")
這部分代碼完美運行,并給了我想要的結果。但是,我無法應用像 df.drop(['Company', 'Type', 'Firstname'], axis=1) 這樣的資料框邏輯,因為它是作業簿而不是資料框
uj5u.com熱心網友回復:
由于您已將問題標記為pandas
,因此您可以使用pandas
閱讀和drop
:
for file in os.listdir("C:/Users/hhh/Desktop/aaa/python/Matching"):
if file.startswith("TVC"):
dfs = pd.read_excel(file, sheet_name=None)
output = dict()
for ws, df in dfs.items():
if ws in ["Opt-Ins", "New Voting Members", "Temporary Members"]:
continue
#drop unneeded columns
temp = df.drop(cols_to_drop, errors="ignore", axis=1)
#rename columns
temp = temp.rename(columns=column_name_update_map)
#drop empty columns
temp = temp.dropna(how="all", axis=1)
output[ws] = temp
writer = pd.ExcelWriter(f'{file.replace(".xlsx","")} (updated headers).xlsx')
for ws, df in output.items():
df.to_excel(writer, index=None, sheet_name=ws)
writer.save()
writer.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470707.html