有人能帮我解决以下奇怪的情况吗? 因此,我有下表(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;}
我做错了什么
谢谢
似乎在函数内循环时,代码只附加了最后遇到的值。也就是说,当使用打印时,迭代成功完成。 该功能已更改为:
之后,我使用style.apply而不是style.applymap调用了该函数。 这解决了我的问题。希望它也能帮助你
相关问题 更多 >
编程相关推荐