Функция Python, вводящая переменные в строки

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

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

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

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

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

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, любая помощь приветствуется.

Благодарю вас!


person mikelowry    schedule 17.04.2020    source источник
comment
Укажите ожидаемый минимально воспроизводимый пример().   -  person Prune    schedule 17.04.2020


Ответы (2)


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

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()

Выход:

введите здесь описание изображения

person Dimitris Thomas    schedule 17.04.2020
comment
Также для всех, кто будет читать это в будущем, это отличный документ, в котором описаны методы строковых переменных: realpython. com/python-f-строки - person mikelowry; 17.04.2020

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

В нотации строки-столбца используется нулевой индекс как для строки, так и для столбца, в то время как в нотации A1 используется стандартная буквенно-цифровая последовательность Excel, состоящая из буквы столбца и строки, начинающейся с 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
person jmcnamara    schedule 17.04.2020