【发布时间】:2020-09-29 14:03:57
【问题描述】:
使用 Panda Dataframes,我想比较两个 DF 并更新 Excel 表。 问题,我从我的代码中看到,它只附加新行。它不会更新前一行。 例如: DF1:
{'Sheet1': [{'ID': 1.0, 'NAME': 'hostname1', 'IP_ADDRESS': '192.168.1.1', 'STATUS': 'completed'}, {'ID': 2.0, 'NAME': 'hostname2', 'IP_ADDRESS': '192.168.1.2', 'STATUS': 'completed'}, {'ID': 3.0, 'NAME': 'hostname3', 'IP_ADDRESS': '192.168.1.3', 'STATUS': 'in_progress'}, {'ID': 4.0, 'NAME': 'hostname4', 'IP_ADDRESS': '192.168.1.4', 'STATUS': 'completed'}]}
DF2:
{'Sheet1': [{'ID': 1.0, 'NAME': 'hostname1', 'IP_ADDRESS': '192.168.1.1', 'STATUS':
'completed'}, {'ID': 2.0, 'NAME': 'hostname2', 'IP_ADDRESS': '192.168.1.2', 'STATUS': 'problem'}, {'ID': 3.0, 'NAME': 'hostname3', 'IP_ADDRESS': '192.168.1.3', 'STATUS': 'rma'}, {'ID': 4.0, 'NAME': 'hostname4', 'IP_ADDRESS': '192.168.1.4', 'STATUS': 'completed'},
{'ID': 5.0, 'NAME': 'hostname5', 'IP_ADDRESS': '192.168.1.5', 'STATUS': 'future'}]}
如您所见,DF2 具有不同的值。
这是代码,它显示两个 DF 不同,但不会更新工作表。
def writexlsx_multi_sheets(filename, data, sheet_name, **to_excel_kwargs):
from openpyxl import load_workbook
orginalDF = pd.read_excel(filename, sheet_name=sheet_name, index=False)
newDF = pd.DataFrame.from_dict(data)
if 'engine' in to_excel_kwargs:
to_excel_kwargs.pop('engine')
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = load_workbook(filename)
writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
if not orginalDF.equals(newDF):
result = orginalDF.combine_first(newDF)
result.to_excel(writer, sheet_name=sheet_name, index=False)
writer.save()
else:
return False
【问题讨论】: