Python Pandas Style.ApplyMap工作异常

2024-09-27 23:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我解决以下奇怪的情况吗? 因此,我有下表(Oracle),如下所示: Screenshot

回到python,我创建了以下脚本。我连接到数据库,然后从表中检索数据。之后,数据帧将基于表的内容构建。使用函数highlightgreater,然后我想根据值为单元格添加背景色。不幸的是,这并没有按预期发生,因为函数似乎一直在ELSE子句上运行,即使IF不是故意的

#! /usr/bin/python

# import the necessary components first
import cx_Oracle
import config
import pandas as pd

connection = cx_Oracle.connect(
    config.username,
    config.password,
    config.dsn,
    encoding=config.encoding
)

mon_user_accounts = """ SELECT USER_ID, USER_NAME, ACCOUNT_STATUS, REMAINING_DAYS, 
                        expiry_date , inserted_time as "STATUS_TIME"
                        FROM KVS_SERVICE.mon_user_accounts 
                        WHERE inserted_time = (select max(inserted_time) from mon_user_accounts) """

df_usr_acc = pd.read_sql(mon_user_accounts, con=connection)

def highlightGreaterThen(color):
    for value in df_usr_acc['REMAINING_DAYS']:
        if value <= 30:
            color = 'chocolate'
        else:
            color = 'honeydew'
    return 'background-color: %s' % color


s = df_usr_acc.style.set_table_attributes('class="table table-hover table-condensed"').applymap(
    highlightGreaterThen, subset=['USER_ID'])
to_render = s.hide_index().render()
print(to_render)

如果我手动执行该函数,并在其中添加一些打印,则会打印出所需的结果,但在脚本中执行时,效果不佳

for value in df_usr_acc['REMAINING_DAYS']:
    if value <= 30:
        print('chocolate')
    else:
        print('honeydew')

结果是:

honeydew
chocolate
honeydew
honeydew
honeydew
honeydew
honeydew

但在执行整个脚本时,结果是:

T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow0_col0 { background-color:  honeydew;}
T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow1_col0 { background-color:  honeydew;}
T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow2_col0 { background-color:  honeydew;}
T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow3_col0 { background-color:  honeydew;}
T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow4_col0 { background-color:  honeydew;}
T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow5_col0 { background-color:  honeydew;}
T_ce7b8808_c6a5_11ea_9513_34e12def64cdrow6_col0 { background-color:  honeydew;}

我做错了什么

谢谢


Tags: importconfigdfvalueusrcoloraccbackground
1条回答
网友
1楼 · 发布于 2024-09-27 23:20:58

似乎在函数内循环时,代码只附加了最后遇到的值。也就是说,当使用打印时,迭代成功完成。 该功能已更改为:

def userAccountHighlightGreaterThen(color):
    return ['background-color: chocolate'
            if value <=30
            else 'background-color: honeydew'
            for value in df_usr_acc['REMAINING_DAYS']
            ]

之后,我使用style.apply而不是style.applymap调用了该函数。 这解决了我的问题。希望它也能帮助你

相关问题 更多 >

    热门问题