小言_互联网的博客

怎么把pandas.DataFrame搞的花里胡哨??

311人阅读  评论(0)

首发公众号:pythonic生物人


平日看到的pandas.DataFrame数据是这个样子的~

平淡无奇,索然无味,读了本文后,可以这样子了~

这样子~ 

或者这样子~


目录

1 - style.applymap着色符合条件的每个元素

2 - apply着色符合条件的column-/row-/table-wise

3 - style.applymap、apply联合使用

4 -  style.background_gradient设置背景填充色

5 - style.bar绘制Series柱状图

6 - to_excel导出个性化结果到excel中

7 - 更多设置


以上个性化的设置主要用到pd.DataFrame.style的如下属性:

['apply', 'applymap', 'background_gradient', 'bar', 'caption', 'cell_ids', 'clear', 'columns', 'ctx', 'data', 'env', 'export', 'format', 'from_custom_template', 'hidden_columns', 'hidden_index', 'hide_columns', 'hide_index', 'highlight_max', 'highlight_min', 'highlight_null', 'index', 'loader', 'na_rep', 'pipe', 'precision', 'render', 'set_caption', 'set_na_rep', 'set_precision', 'set_properties', 'set_table_attributes', 'set_table_styles', 'set_uuid', 'table_attributes', 'table_styles', 'template', 'to_excel', 'use', 'uuid', 'where']

本文介绍部分~

1 - style.applymap着色符合条件的每个元素


  
  1. import pandas as pd
  2. import numpy as np
  3. np.random.seed( 24)
  4. df = pd.DataFrame({ 'A': np.linspace( 1, 10, 10)})
  5. df = pd.concat(
  6. [df, pd.DataFrame(np.random.randn( 10, 4), columns=list( 'BCDE'))], axis= 1)
  7. # 添加缺省值
  8. df.iloc[ 3, 3] = np.nan
  9. df.iloc[ 0, 2] = np.nan
  10. # style.applymap着色符合条件的每个元素
  11. def color_negative_red(val):
  12. """
  13. 小于0的元素上红色、反之上蓝色
  14. """
  15. color = '#c72e29' if val < 0 else '#01a2d9'
  16. return 'color: %s' % color
  17. s = df.style.applymap(color_negative_red)
  18. s

2 - apply着色符合条件的column-/row-/table-wise


  
  1. def highlight_max(s):
  2. '''
  3. 对DataFrame的Seris中最大值上绿色
  4. '''
  5. is_max = s == s.max()
  6. return [ 'background-color: #74C476' if v else '' for v in is_max]
  7. df.style.apply(highlight_max)

3 - style.applymap、apply联合使用


  
  1. #.号连接即可
  2. df.style.\
  3. applymap(color_negative_red).\
  4. apply(highlight_max)

4 -  style.background_gradient设置背景填充色


  
  1. import seaborn as sns
  2. s = df.style.background_gradient(cmap= 'Set2_r')
  3. s

5 - style.bar绘制Series柱状图

df.style.bar(subset=['A', 'B'], align='mid', color=['#dc2624', '#649E7D'])


  
  1. import pandas as pd
  2. from IPython.display import HTML
  3. # Test series
  4. test1 = pd.Series([ -100, -60, -30, -20], name= 'All Negative')
  5. test2 = pd.Series([ 10, 20, 50, 100], name= 'All Positive')
  6. test3 = pd.Series([ -10, -5, 0, 90], name= 'Both Pos and Neg')
  7. head = """
  8. <table>
  9. <thead>
  10. <th>Align</th>
  11. <th>All Negative</th>
  12. <th>All Positive</th>
  13. <th>Both Neg and Pos</th>
  14. </thead>
  15. </tbody>
  16. """
  17. aligns = [ 'left', 'zero', 'mid']
  18. for align in aligns:
  19. row = "<tr><th>{}</th>".format(align)
  20. for series in [test1, test2, test3]:
  21. s = series.copy()
  22. s.name = ''
  23. row += "<td>{}</td>".format(
  24. s.to_frame().style.bar(align=align,
  25. color=[ '#dc2624', '#649E7D'],
  26. width= 100).render()) #testn['width']
  27. row += '</tr>'
  28. head += row
  29. head += """
  30. </tbody>
  31. </table>"""
  32. HTML(head)

6 - to_excel导出个性化结果到excel中


  
  1. df.style.\
  2. applymap(color_negative_red).\
  3. apply(highlight_max).\
  4. to_excel( 'styled.xlsx', engine= 'openpyxl')

7 - 更多设置

https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html

首发公众号:pythonic生物人

 


转载:https://blog.csdn.net/qq_21478261/article/details/115773807
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场