Pandas style.apply()报错:TypeError: 'DataFrame'对象不可调用
解决Pandas Style中出现的"DataFrame object is not callable"错误
你遇到的TypeError: 'DataFrame' object is not callable其实很好定位——问题出在df.style.apply(df_color, axis=None)这一行。Pandas的style.apply()方法要求传入的是可调用的函数,但你直接传了df_color这个DataFrame对象,程序尝试把它当成函数执行,自然就触发了这个错误。
下面给你两种可行的解决思路,你可以根据需求选择:
方法1:修正Pandas Style的使用方式
如果你想继续用Pandas Style系统,只需要把样式DataFrame包装成一个函数传给apply即可。因为当axis=None时,apply会把整个数据DataFrame传给函数,我们只需要让函数返回预先定义好的样式DataFrame就行:
empty_stock_list = [ { 'row_index': <num>, 'column_index': <num> }, ... ] with pd.ExcelWriter(OUTPUT_FILE, engine='xlsxwriter') as writer: df = pd.concat([header_row, data_price], ignore_index=False, sort=False).reset_index(drop=True) # 初始化样式DataFrame,默认黑色字体 df_color = pd.DataFrame('font-color: black', index=df.index, columns=df.columns) # 标记空库存单元格为红色字体 for empty_stock in empty_stock_list: df_color.iloc[empty_stock['row_index'], empty_stock['column_index']] = 'font-color: #FF0000' # 定义一个返回样式DataFrame的函数 def apply_styles(data_df): return df_color # 把函数传给apply,而不是直接传df_color df.style.apply(apply_styles, axis=None).to_excel(writer, sheet_name=sheet_name, index=False, header=None)
方法2:直接用XlsxWriter原生API设置格式(更高效直观)
既然你已经在用XlsxWriter作为Excel引擎,其实可以跳过Pandas Style,直接操作Workbook和Worksheet对象,这种方式更高效,也更不容易踩坑:
empty_stock_list = [ { 'row_index': <num>, 'column_index': <num> }, ... ] with pd.ExcelWriter(OUTPUT_FILE, engine='xlsxwriter') as writer: df = pd.concat([header_row, data_price], ignore_index=False, sort=False).reset_index(drop=True) # 先把数据写入工作表 df.to_excel(writer, sheet_name=sheet_name, index=False, header=None) # 获取目标工作表对象 worksheet = writer.sheets[sheet_name] # 创建红色字体的格式对象 red_font = writer.book.add_format({'font_color': '#FF0000'}) # 遍历空库存列表,逐个设置单元格格式 for empty_stock in empty_stock_list: row = empty_stock['row_index'] col = empty_stock['column_index'] # 注意:XlsxWriter的行列索引和Pandas iloc一致,都是从0开始 worksheet.write(row, col, df.iloc[row, col], red_font)
额外说明
两种方法都能实现你的需求,方法2的优势是不需要依赖Pandas的Style系统,直接用XlsxWriter的原生能力,性能更好,也更适合批量设置单元格格式的场景。
内容的提问来源于stack exchange,提问作者Michael Harley
相关产品推荐
相关产品推荐

