我有一个pandas.DataFrame
with 值,说:
df = pd.DataFrame(np.random.randn(5, 3), columns=['a', 'b', 'c'])
In [160]: df
Out[160]:
a b c
0 -0.316527 -0.721590 1.812285
1 -1.704653 -0.415888 -0.294740
2 -1.126637 0.032084 -1.344484
3 0.081789 -1.311954 1.941496
4 0.617405 0.114212 -0.763610
现在我已经编写了自己的颜色渐变函数,以便获得pd.DataFrame
相同大小和形状的 a,但每个单元格都有颜色十六进制代码,例如:
df_clrs = pd.DataFrame([
['#bc4700', '#dea380', '#bc4700'],
['#384f69', '#dea380', '#bc4700'],
['#dea380', '#bc4700', '#384f69'],
['#384f69', '#384f69', '#dea380'],
['#dea380', '#bc4700', '#384f69']],
columns=['a', 'b', 'c']
)
In [164]: df_clrs
Out[164]:
a b c
0 #bc4700 #dea380 #bc4700
1 #384f69 #dea380 #bc4700
2 #dea380 #bc4700 #384f69
3 #384f69 #384f69 #dea380
4 #dea380 #bc4700 #384f69
我假设我也用文本颜色做到了这一点,所以:
df_fnts = pd.DataFrame([
['#f1f1f1','#f1f1f1','#000000'],
['#000000','#f1f1f1','#f1f1f1'],
['#000000','#f1f1f1','#000000'],
['#f1f1f1','#000000','#f1f1f1'],
['#000000','#000000','#f1f1f1']],
columns=['a', 'b' ,'c']
)
In [167]: df_fnts
Out[167]:
a b c
0 #f1f1f1 #f1f1f1 #000000
1 #000000 #f1f1f1 #f1f1f1
2 #000000 #f1f1f1 #000000
3 #f1f1f1 #000000 #f1f1f1
4 #000000 #000000 #f1f1f1
我的目标是现在公开DatFrame.style
功能,如这些教程中所示。
但是,教程中演示的所有函数都侧重于传递函数(使用pd.DataFrame.style.applymap
),但是,我已经创建了所有属性。
我尝试过的事情
因为在文档中看起来您需要使用适当的属性附加值,所以我创建了一个这样的函数:
def _apply_prop(df, prop):
return df.applymap(lambda x: prop + ':' + x)
# apply the color mapping
df.style.applymap(
_apply_prop(
df_clrs,
'background-color'
)
).to_excel('~/Desktop/background-colors.xlsx')
但我得到一个TypeError
TypeError: the first argument must be callable