首页 > 解决方案 > 将样式多索引熊猫保存到excel时出现KeyError

问题描述

df样式保存到excel中时,编译器返回

KeyError:“['A'] 不在索引中”

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')

预期产出

在此处输入图像描述

PS:类似的帖子已提交给pandas git:https ://github.com/pandas-dev/pandas/issues/42906可能存在错误

标签: pythonpandasstyles

解决方案


这无关Styler.to_excel。这与您使用 MultiIndex 列而不提供subset有效格式的事实有关。

如文档中所述,您必须提供有效的.loc索引器。

解决方案是使用:

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

或 pandas Indexer,如果您愿意(这些解决方案是同构的)

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

请注意,您的输出只会影响文本颜色,因为您没有使用background-colorCSS 属性。


推荐阅读