Как добавить к таблице в формате Excel Pandas Dataframe

#python

#python

Вопрос:

Я пытаюсь заставить Python взять фрейм данных или 2D массив numpy и вставить его в существующую таблицу в Excel, чтобы таблица расширялась с моими данными в соответствующих столбцах

Я попытался с помощью xlwings вставить фрейм данных в Excel и развернуть его в таблице. Две мои таблицы расширяются так, как я хочу, с данными в соответствующем месте, но одна из моих таблиц не расширяет данные, как если бы таблица не существовала, и продолжает записывать их вне таблицы. Я не уверен, имеет ли это какое-то отношение к проблемной таблице, имеющей итоговую строку внизу.

 import numpy as np
import xlwings as xw

sheet = wb.sheets['sheet1']

"Inserts row of data above last row in table and moves n'th row to n-1'th row"
sheet.range('table1[#Data]').last_cell.api.EntireRow.Insert()
last_row = sheet.range('table1[#Data]).end('down').end('down').row
sheet.range('A{}:F{}'.format(last_row-1, last_row-1)).value = sheet.range('A{}:F{}'.format(last_row, last_row)).value

data = np.array(my_data)
sheet.range('A{}'.format(last_row)).value = data
sheet.range('A{}'.format(last_row)).expand('table')
  

Я надеялся, что это расширит мой массив numpy размером 20×6 в столбцы от A до F в таблице, но, похоже, это не сработает. Я не уверен, есть ли какой-нибудь более простой способ добавить эти данные в существующую таблицу, чтобы она правильно расширялась, но я не могу понять, как это сделать. Я был бы очень признателен за любую помощь

Ответ №1:

Было бы лучше преобразовать файл xlsx в csv перед добавлением любой строки.

Затем вы можете открыть файл для записи и добавить строки.

 cols = ['X1', 'X2', 'X3']
df['Y'] = df[cols].apply(lambda row: ','.join(row.values.astype(str)), axis=1)

with open('your_file.csv','wb') as f:
    for index, row in df.loc[:,Y].iterrows():
        f.write(row)
        f.write('n')
  

Комментарии:

1. Привет, я не уверен, что это сработает для меня, поскольку таблицы, которые у меня есть, находятся на отдельных листах. Таблица, с которой я имею дело, содержит только одну из этих таблиц

2. Я думаю, что нашел решение. С помощью xlwings я просто вставил количество строк данных, которые я хочу вставить, чтобы вручную развернуть таблицу, а затем просто поместил данные в соответствующие столбцы

3. Молодец, Майк. 🙂