首页 > 解决方案 > Pandas 将样式设置为 excel“TypeError:第一个参数必须是可调用的”

问题描述

import pandas as pd
import numpy as np
np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
               axis=1)
df.iloc[3, 3] = np.nan
df.iloc[0, 2] = np.nan

df.style.applymap('green', subset=pd.IndexSlice[1:3, 'B': 'C']).\
    to_excel('sA009.xlsx', engine='openpyxl')

TypeError:第一个参数必须是可调用的。df.style.applymap('green', subset=pd.IndexSlice[1:3, 'B': 'C']) 没有错误。但是 df.style.applymap('green', subset=pd.IndexSlice[1:3, 'B': 'C'])。
to_excel('sA009.xlsx', engine='openpyxl') 不起作用?为什么我需要使用“func”而不是“green”?

标签: pythonpandasdataframe

解决方案


该函数df.style.appylmap(...)的第一个参数是一个函数,该函数接受一个标量并返回一个带有 CSS 属性-值对的字符串。

作为来自https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html的示例,该函数将负数着色为红色,正数着色为黑色。

def color_negative_red(val):
    """
    Takes a scalar and returns a string with
    the css property `'color: red'` for negative
    strings, black otherwise.
    """
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

在这种情况下,单元格的样式仅取决于它自己的值。这意味着我们应该使用按Styler.applymap元素工作的方法。

s = df.style.applymap(color_negative_red)

推荐阅读