我有一段代码,可以从excel文件(文件A)创建数据帧,应用格式,并将结果保存到另一个excel文件(文件B)。
部分格式化涉及XlsxWriter包的.conditional_format()方法,如下所示:
worksheet.conditional_format('A1:F80',
{'type':'cell',
'criteria':'==',
'value':'"Folder & Contents:"',
'format': boldfill})
文件A可以具有不同数量的数据,因此文件B将具有不同的大小。
因此我想知道是否有任何方法可以应用condition_format()方法,该方法能够读取结果数据帧的大小,并相应地将格式应用到表的末尾,而不是超过标准大小(比如'A1:F80'),如上面的代码所示。
感谢!!!
答案 0 :(得分:2)
我认为没有内置选项,因此您可以定义自己的函数以从dataframe传递到excel范围。
以下是您可以做的事情:
获取行范围(简单):
def get_row_range(df, start_row = 0):
# Using python convention that first row is zero
return (str(start_row+1), str(start_row + df.shape[0]))
获取列范围(不太容易):
from string import ascii_uppercase
def get_col_range(df, start_col = 0):
return (get_col_str(start_col), get_col_str(start_col + df.shape[1] - 1))
def get_col_str(num):
N = len(ascii_uppercase)
if num/N == 0:
return ascii_uppercase[num]
if num/N > 0:
prefix = ascii_uppercase[num/N - 1]
suffix = ascii_uppercase[num%N]
return prefix + suffix
把所有东西放在一起:
def get_df_range(df, start_col = 0, start_row = 0):
col_range = get_col_range(df, start_col)
row_range = get_row_range(df, start_row)
return ":".join([x+y for x, y in zip(col_range, row_range)])
测试:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(100, 3))
get_df_range(df) # 'A1:C100'
get_df_range(df, start_col = 1, start_row = 2) # 'B3:D102'
答案 1 :(得分:1)