python - 将样式多索引熊猫保存到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可能存在错误
解决方案
这无关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-color
CSS 属性。
推荐阅读
- flask - 将 ckeditor5 添加到 Flask
- postgresql - 在postgresql的另一个数据库中调用视图?
- firefox - 内容脚本如何以及以何种方式在不同的网页之间共享内容范围的变量?
- javascript - 我想在javascript中使用for循环来组合两个数组的数据
- php - 有什么办法可以防止owncloud内存不足?
- leaflet - 传单:更改默认标题长度
- json - Scala Play 中的空序列化(隐式写入)
- powershell - Passing PowerShell data variables to Terraform scripts
- cmd - cmd.exe 无法运行除内置命令外的任何命令
- python - 如何使用python同时多次运行python脚本并在完成后全部终止