Python函数将变量输入字符串
Python function inputting variables into strings
我已经使用 xlsxwriter 将 pandas df 输出到 excel 文件中。我正在尝试在顶部创建一个总计行。为此,我尝试创建一个函数,根据我选择的列动态填充总计。
这是我打算做的事情的一个例子:
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 的新手,感谢您的帮助。
谢谢!
在几乎所有情况下,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 的公式 utility functions:
from xlsxwriter.utility import xl_range
my_range = xl_range(3, 6, 20, 6) # G4:G21
你也可以这样做:
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()
输出:
我已经使用 xlsxwriter 将 pandas df 输出到 excel 文件中。我正在尝试在顶部创建一个总计行。为此,我尝试创建一个函数,根据我选择的列动态填充总计。
这是我打算做的事情的一个例子:
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 的新手,感谢您的帮助。
谢谢!
在几乎所有情况下,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 的公式 utility functions:
from xlsxwriter.utility import xl_range
my_range = xl_range(3, 6, 20, 6) # G4:G21
你也可以这样做:
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()
输出: