У меня есть два файла excel, главный и дочерний. Все имена столбцов одинаковы в обоих файлах.
Я хочу сопоставить столбец C обоих файлов, если есть совпадение, обновить все столбцы для этой конкретной строки, а если совпадения нет, добавить строку в конец главного файла.
Я хочу обновить данные из дочернего файла в основной файл на основе этой логики. Пока я могу обновить основной файл, скопировав все данные из дочернего в основной, но данные в основном файле заменяются из дочернего файла для указанного диапазона. Любая помощь будет высоко ценится.
import openpyxl
Master = openpyxl.load_workbook("Master.xlsx")
Child = openpyxl.load_workbook("Child.xlsx")
Master_File = Master["Sheet1"]
Child_File = Child["Sheet1"]
Функция копирования строк и столбцов из дочернего файла
def copyRange(startCol, startRow, endCol, endRow, sheet):
rangeSelected = []
#Loop through selected rows------------------------------------------------
for i in range(startRow, endRow + 1, 1):
#Appends to row selected list--------------------------------------------
rowSelected = []
for j in range(startCol, endCol + 1, 1):
rowSelected.append(sheet.cell(row=i, column=j).value)
#Adds the rowSelected list and nests inside rangesSelected list------------------------------
rangeSelected.append(rowSelected)
return rangeSelected
Функция для вставки всех данных в мастер-файл
def pasteRange(startCol, startRow, endCol, endRow, sheetReceiving, copiedData):
countRow = 0
for i in range(startRow, endRow + 1, 1):
countCol = 0
for j in range(startCol, endCol + 1, 1):
sheetReceiving.cell(row=i, column=j).value = copiedData[countRow][countCol]
countCol += 1
countRow += 1
Основная функция
def createData():
wb = Workbook()
print("Your data is being Processed.....")
selectedRange = copyRange(1,10,39,45, Child_File)
pastingRange = pasteRange(1,10,39,45, Master_File, selectedRange)
Master.save(r"Final.xlsx")
print("Range copied and pasted")
Final = createData()
1 ответ
Это демонстрирует, как вы можете взять два фрейма данных (которые оба могут быть созданы из .read_excel() в pandas), установить столбец индекса в качестве столбца, с которым вы хотите сопоставить, и обновить оригинал совпадениями из второго фрейма данных, а затем записать в xlsx еще раз.
import pandas as pd
#df = pd.read_excel('myfile1.xlsx')
df = pd.DataFrame({'C': [1, 2, 3],
'D': [400, 500, 600]})
#new_df = pd.read_excel('myfile2.xlsx')
new_df = pd.DataFrame({'C': [1, 2, 6],
'D': [7, 8, 9]})
df.set_index('C', inplace=True)
df.update(new_df.set_index('C'))
df.update(new_df)
df.reset_index().to_excel('updated.xlsx', index=False)
Выход
C D
0 1 8.0
1 2 9.0
2 3 600.0
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.