8

高效办公,pandas美化表格实例演示

 2 years ago
source link: http://www.justdopython.com/2022/08/17/python-beautyPandas/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

高效办公,pandas美化表格实例演示

2022-08-17

| python

我负责十多个地灾项目,经常需要了解设备的离线情况。 公司网站按项目提供了excel表格,看起来较乱,这是下载的数据:

从原始表格里,不太容易看出这些信息:

  • 这个项目下有哪些设备类型
  • 每种类型有多少设备在线
  • 设备上线的时间顺序

这是用脚本,将数据排序分组配色后的效果(脚本和数据文件见文末)

先将“最后上线时间”一列设置为行索引,使用pd.to_datetime转换为datetime类型,再排序

import pandas as pd
from datetime import datetime,timedelta
df2 = pd.read_excel("C:/sf3/sf3/excel/1170_04-28.xlsx",sheet_name="邵阳")

#将“最后上线时间”一列设置为行索引
new = df2.set_index(pd.to_datetime(df2['最后上线时间']))
#新列重命名
new.index.name = 'last'
#按时间排序
new.sort_values('最后上线时间', ascending=True,inplace=True)

分组可以从“设备别名”这列获取,新增一列“设备类型”

#新增一列“设备类型”
new['设备类型'] = new['设备别名'].str.split('0').str[0].str.split(' ').str[0]
new2 = new.groupby(['设备类型','最后上线时间','设备别名','连接状态','所属监测点'],as_index=False)
new3 = new2.all()
  1. 一周内离线的设备,用蓝色标注
    now = datetime.now().strftime('%Y-%m-%d')
    sevenDaysAgo = (datetime.now() + timedelta(days=-7)).strftime('%Y-%m-%d')
    new3.style.highlight_between(left=sevenDaysAgo,right=now,subset=['最后上线时间'],props='font-weight:bold;color:rgb(64, 158, 255)')
    
  2. 给每种类型加上颜色
    new3.style.highlight_between(left=sevenDaysAgo,right=now,subset=['最后上线时间'],props='font-weight:bold;color:rgb(64, 158, 255)')\
    .highlight_between(left='普适型声光报警器',right='普适型声光报警器',subset=['设备类型'],props='background:#c7f5fe')\
    .highlight_between(left='普适型声光报警器',right='声光报警器',subset=['设备类型'],props='background:#c7f5fe')\
    .highlight_between(left='普适型GNSS基准站',right='普适型GNSS基准站',subset=['设备类型'],props='background:#ffa5a5')\
    .highlight_between(left='普适型GNSS监测站',right='普适型GNSS监测站',subset=['设备类型'],props='background:#a1eafb')\
    
  3. 在线状态的设备,用黄色标注
    .highlight_between(left='在线',right='在线',subset=['连接状态'],props='background:#f9ed69')
    

脚本和数据文件

文件下载地址: http://ssw.fit/file/

import pandas as pd
from datetime import datetime,timedelta
df2 = pd.read_excel("C:/sf3/sf3/excel/1170_07-28.xlsx",sheet_name="邵阳")

new = df2.set_index(pd.to_datetime(df2['最后上线时间']))
new.index.name = 'last'
new.sort_values('最后上线时间', ascending=True,inplace=True)

new['设备类型'] = new['设备别名'].str.split('0').str[0].str.split(' ').str[0]
new2 = new.groupby(['设备类型','最后上线时间','设备别名','连接状态','所属监测点'],as_index=False)

new3 = new2.all()
now = datetime.now().strftime('%Y-%m-%d')
sevenDaysAgo = (datetime.now() + timedelta(days=-7)).strftime('%Y-%m-%d')
new3.style.highlight_between(left=sevenDaysAgo,right=now,subset=['最后上线时间'],props='font-weight:bold;color:rgb(64, 158, 255)')\
.highlight_between(left='普适型声光报警器',right='普适型声光报警器',subset=['设备类型'],props='background:#c7f5fe')\
.highlight_between(left='普适型声光报警器',right='声光报警器',subset=['设备类型'],props='background:#c7f5fe')\
.highlight_between(left='普适型GNSS基准站',right='普适型GNSS基准站',subset=['设备类型'],props='background:#ffa5a5')\
.highlight_between(left='普适型GNSS基站',right='普适型GNSS基站',subset=['设备类型'],props='background:#ffa5a5')\
.highlight_between(left='普适型GNSS监测站',right='普适型GNSS监测站',subset=['设备类型'],props='background:#a1eafb')\
.highlight_between(left='普适型裂缝计',right='普适型裂缝计',subset=['设备类型'],props='background:#a6e3e9')\
.highlight_between(left='普适型雨量计',right='普适型雨量计',subset=['设备类型'],props='background:#71c9ce')\
.highlight_between(left='在线',right='在线',subset=['连接状态'],props='background:#f9ed69')\
.highlight_between(left='普适型变形桩',right='普适型变形桩',subset=['设备类型'],props='background:#cbf1f5')

项目经理要我整理某个项目的离线表给他,修改下脚本里的sheet_name即可。是不是省事呢?

  • 省去登录网站下载excel
  • 省去整理表格

如果你觉得本文对你有帮助,还请点个赞支持一下~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK