Python функция ввода переменных в строки - PullRequest
1 голос
/ 17 апреля 2020

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

Вот пример того, что я собираюсь сделать:

worksheet.write_formula('G4', '=SUM(G4:G21)')
#G4 = Where total should be placed

Мне нужно, чтобы это была функция, потому что число строк может изменяться (диапазон суммирования должен быть динамическим c), и я хочу, чтобы был простой способ применить эту формулу к различным столбцам.

Поэтому я пришел к следующему:

def get_totals(column):
    start_row = '4' #row which the totals will be on
    row_count = str(tl_report.shape[0]) #number of rows in the table so I can sum up every row.  
    return (worksheet.write_formula(str(column+start_row),"'=SUM("+str(column+start_row)+":"+str(column+row_count)+")'") )


При запуске get_totals ("G") это просто приводит к 0. Я подозреваю, что это связано с STR оператор, который я должен был применить, потому что его добавление одинарных кавычек в формулу, и, следовательно, неверное отображение

Однако я не могу убрать оператор str, потому что, очевидно, я не могу объединить INT?

Может быть, я все это неправильно кодирую, новичок в python, любая помощь приветствуется.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы также можете сделать что-то вроде этого:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1,2,3,4], 'B': [5,6,7,8],
                    'C': [np.nan, np.nan, np.nan, np.nan]})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False, startrow = 2)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

def get_totals(start_row, sum_column, column1='A', column2='B'):
    for row in range(start_row,df.shape[0]+start_row):
        worksheet.write_formula(f'{sum_column}{row}', f'=SUM({column1}{row},{column2}{row})')

get_totals(4, 'C')

writer.save()

Вывод:

enter image description here

1 голос
/ 17 апреля 2020

Почти во всех случаях методы XlsxWriter поддерживают две формы нотации для обозначения положения ячеек: нотация столбца строки и нотация A1.

нотация столбца строки использует индекс на основе нуля для строки и столбца, в то время как В нотации A1 используется стандартная последовательность букв alphanumeri c в столбце и строка на основе 1. Например:

(6, 2)      # Row-column notation.
('C7')      # The same cell in A1 notation.

Так что для вашего случая вы могли бы сделать следующее и установить значения столбца строки программно (возможно, вам придется скорректировать -1, чтобы получить нулевую индексацию):

worksheet.write_formula(start_row, start_column, '=SUM(G4:G21)')

Для формулы вы можете использовать из служебных функций XlsxWriter :

from xlsxwriter.utility import xl_range 

my_range = xl_range(3, 6, 20, 6)  # G4:G21
...