将样式多索引 pandas 保存到 excel 时出现 KeyError

Getting KeyError when saving style multiindex pandas to excel

将已样式化的 df 保存到 excel 时,编译器 return

KeyError: "['A'] not in index"

import pandas as pd
import numpy as np


def color_negative_red(value):
  if value < 0:
    color = 'red'
  elif value > 0:
    color = 'green'
  else:
    color = 'black'

  return 'color: %s' % color

np.random.seed(0)
arrays = [np.hstack([['One']*2, ['Two']*2]) , ['A', 'B', 'A', 'B']]
columns = pd.MultiIndex.from_arrays(arrays)
df=  pd.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))
df.columns = columns
data=df.style.applymap(color_negative_red, subset=['A'])

data.to_excel('test.xlsx')

预期输出

P.S.: 类似 post 已提交给 pandas git: https://github.com/pandas-dev/pandas/issues/42906 潜在的错误

你能试试吗:

df.style.applymap(color_negative_red, subset=([slice(None), "A"]))

这与Styler.to_excel无关。这与您使用的是 MultiIndex 列并且未提供有效格式的 subset 这一事实有关。

按照文档中的建议,您必须提供有效的 .loc 索引器。

解决方案是使用:

df.style.applymap(color_negative_red, subset=(slice(None), (slice(None), 'A')))

或 pandas 索引器(如果您愿意)(这些解决方案是同构的)

ix = pd.IndexSlice
df.style.applymap(color_negative_red, subset=ix[:, ix[:, 'A']])

请注意,您的输出将仅影响文本颜色,因为您没有使用 background-color CSS 属性。