【问题标题】:How to create multiple png files using styler function如何使用样式器功能创建多个 png 文件
【发布时间】:2022-12-12 15:52:58
【问题描述】:

下面是我正在使用的示例脚本/数据。当尝试使用列表创建多个 png 文件时,test = [],运行此脚本会给我这个错误OSError: [Errno 22] Invalid argument: 'test<pandas.io.formats.style.Styler object at 0x0000025FD890D250>.png'。我认为错误来自最后一个循环,我将如何更改它,dfi.export(df, f'test{i}.png') 或任何其他输出列表中所有数据帧的建议都很好。

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_list=[df,df2]

def colors(i):
    if i > 0:
        return 'background: red'
    elif i < 0:
        return 'background: green'
    elif i == 0:
        return 'background: yellow'
    else:
        ''

test=[]
for df in df_list:
    filename=(df.style
        .applymap(colors, subset=pd.IndexSlice[:, pd.IndexSlice[:,'a']])
    )
    test.append (filename)
    
    for df in test:
        dfi.export(df, f'test{i}.png')

【问题讨论】:

    标签: python pandas dataframe styler


    【解决方案1】:

    如果需要在png 的新文件名中添加数字后缀,例如test0test1,请使用:

    for i, df in enumerate(test):
        dfi.export(df, f'test{i}.png')
    

    没有另一个循环的另一个解决方案:

    for i, df in enumerate(df_list):
        styler=(df.style
                  .applymap(colors, subset=pd.IndexSlice[:, pd.IndexSlice[:,'a']])
        )
        dfi.export(styler, f'test{i}.png')
    

    【讨论】:

    • 非常感谢,耶斯莱尔。 “IIUC”代表什么?在性能方面,什么会更好?也许是第二个选项,因为不需要额外的循环?
    • @yeppi - 如果很好地理解你的问题,它就很重要。顺便说一句,你是对的,第二个更好,因为没有另一个循环。
    • 明白了,非常感谢你,jezrael!
    猜你喜欢
    • 2018-01-18
    • 2019-02-08
    • 2010-10-19
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多