Python 基于样式的数据帧过滤器

Python 基于样式的数据帧过滤器,python,pandas,Python,Pandas,这显示了如何应用样式pandas.DataFrame。如何从df中选择黄色单元格 df = pd.DataFrame({"A": [1, 2, 3, 4, 5], "B": [1, 7, 14, 5, 3]}) def apply_color(v): if v % 2 == 0: return "background-color: yellow" else: return "&

这显示了如何应用样式
pandas.DataFrame
。如何从
df
中选择黄色单元格

df = pd.DataFrame({"A": [1, 2, 3, 4, 5], "B": [1, 7, 14, 5, 3]})

def apply_color(v):
    if v % 2 == 0:
        return "background-color: yellow"
    else:
        return ""
df.style.applymap(apply_color)

我不确定这是否完全解决了问题,但这里有一个部分解决方案

df.style.applymap
返回一个
Styler
对象:

显示数据帧后,样式更改存储在样式器的ctx属性中:

因此,通过将style.applymap分配给变量,可以获得样式器

a = df.style.applymap(apply_color)

#then executing:

a

#gives you the dataframe, styled with yellow background

#now, you can access the style by doing


a.ctx

#this returns


defaultdict(list,
        {(0, 0): [''],
         (0, 1): [''],
         (1, 0): ['background-color: yellow'],
         (1, 1): [''],
         (2, 0): [''],
         (2, 1): ['background-color: yellow'],
         (3, 0): ['background-color: yellow'],
         (3, 1): [''],
         (4, 0): [''],
         (4, 1): ['']})
捐款人:

按如下方式查找单元格ID:

for cell, color in a.ctx.items():
    if 'background-color: yellow' in color:
        print(cell, color, df.iloc[cell])

您正在寻找
df[df.mod(2.eq(0)]
?您希望过滤器返回什么?在这种情况下是一系列整数,还是仅仅是匹配整数的位置?@anky no,这是一个基于值的过滤器。我想根据颜色选择单元格。假设您收到了
df
的pickle文件,您不知道该样式是如何应用的。如何仅选择黄色单元格?样式是否保留/记录在
.pkl
中?我觉得你需要使用造型功能,而不仅仅是data@ALollz是的,没错,这就是我想知道的。哦,这太完美了!我们可以循环使用a.ctx.items()中的单元格、颜色:并选择颜色为黄色的value
df.iloc[cell]
是的,这不完整的原因是,有时ctx属性的内容似乎消失了。有趣的是,到目前为止,我还没有经历过
a.ctx
丢失它的值。你能分享一些例子吗?啊,不,这是我的错误。我尝试了q=df.style.applymap(apply_color),然后立即尝试了q.ctx,它给出了空的dict。但这意味着该函数从未执行过,因此属性为空。@E.K.已经更新了答案。请随意编辑。