如何将三个重复的Pandas DataFrame循环处理逻辑合并为一个?
简化循环逻辑的解决方案
我们可以把重复的处理逻辑封装成一个函数,然后通过遍历包含数据框列表和对应前缀的元组列表,一次性完成所有处理,让代码更简洁高效。
步骤说明:
- 封装重复逻辑:创建一个函数,接收数据框列表和输出文件前缀,内部完成样式应用和导出操作。
- 批量处理:将所有需要处理的数据框列表和对应前缀整理成元组,遍历这个元组列表调用函数即可。
简化后的完整代码:
import pandas as pd import dataframe_image as dfi df = pd.DataFrame(data=[[-100,500,400,0,222,222], [9000,124,0,-147,54,-56],[77,0,110,211,0,222], [111,11,-600,33,0,22],[213,-124,0,-147,54,-56]]) df2 = pd.DataFrame(data=[[100,500,200,0,555,222], [5000,124,0,-147,54,50],[77,0,500,211,0,222], [-900,11,-600,33,0,22],[500,-124,0,-147,54,-56]]) df.columns = pd.MultiIndex.from_product([['x','y','z'], list('ab')]) df2.columns = pd.MultiIndex.from_product([['x','y','z'], list('ab')]) df_list1=[df] df_list2=[df2] df_list3=[df,df2] def colors(i): if i < 0: return 'background: red' elif i > 0: return 'background: green' else: return 'background: yellow' # 封装处理逻辑的函数 def process_dataframes(df_list, file_prefix): for idx, dataframe in enumerate(df_list): styler = dataframe.style.applymap(colors, subset=pd.IndexSlice[:, pd.IndexSlice[:, 'a']]) dfi.export(styler, f'{file_prefix}_{idx}.png') # 批量处理所有数据框列表 processing_tasks = [ (df_list1, 'test1'), (df_list2, 'test2'), (df_list3, 'test3') ] for df_list, prefix in processing_tasks: process_dataframes(df_list, prefix)
额外优化:
- 简化了
colors函数的分支逻辑,去掉冗余的else分支(数值只有正负零三种情况)。 - 函数命名更具语义化,提升代码可读性。
内容的提问来源于stack exchange,提问作者user18708380
相关产品推荐
相关产品推荐

