将样式多索引 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 属性。
将已样式化的 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 属性。