Как изменить один столбец в листе Excel не затирая остальное (python)?

Перелопатил кучу сайтов, но ответа так и не нашел. Прошу подсказать какая библиотека справится с моей задачей.

Есть Excel.xlsx файл с двумя листами(sheet1, sheet2). В каждом листе по 5000 строк и по 30 столбцов. Необходимо из sheet2, взять один столбец и переместить его в sheet1. Т.е. перезаписать этот столбец(Не добавить!). Или как вариант удалить старый и добавить новый. Названия у столбцов одинаковые, и никакой фильтрации не требуется. Просто копировать-вставить. При этом, необходимо, что бы в записываемом листе sheet1 остальные данные не трогались и никак не перезаписывались.

Есть идеи, как это можно реализовать?


Ответы (2 шт):

Автор решения: Сергей Кох

Так как excel файл это просто набор XML-файлов упакованных в zip-архив, то перезаписать отдельный столбец в файле невозможно, так как при записи происходит сжатие и архивация данных. Для ускорения работы с большими объёмами данных посмотрите в сторону баз данных. Но скопировать значения из одного столбца одной страницы в другой столбец другой страницы вы сможете. И затем полностью перезаписать файл, не изменяя другие данные у вас тоже получиться.

import openpyxl

wb = openpyxl.load_workbook('Книга 1.xlsx')

# Открываем рабочие листы для работы с ними.

ws1 = wb.worksheets[0]
ws2 = wb.worksheets[1]

# Копируем, 'D:D' это столбец из которого копируется,
# а column=4, задает столбец в который вставляются значения.

for cell in ws2['D:D']:
    ws1.cell(row=cell.row, column=4, value=cell.value)

wb.save('Книга 1.xlsx')
→ Ссылка
Автор решения: Roman

Используйте pandas

import pandas as pd

df1  = pd.read_excel('/Users/Roman/stackoverflow/text.xlsx', sheet_name="Sheet1")
df2  = pd.read_excel('/Users/Roman/stackoverflow/text.xlsx', sheet_name="Sheet2")


df1['column_1'] = df2['column_1']

Ноутбук

→ Ссылка