Как изменить один столбец в листе 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')
Используйте 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']