工作中遇到的一个问题: 统计各地区新能源汽车的充电时长 数据来源是北理新源的单日全球的运行数据。

这里仅统计北上广重庆四个地区的 数据处理的代码就省略了 需要整理好的是4个dataframe(数据已保存为H5格式) 分别是对应上述4个城市的:

import pandas as pd
from pyecharts import Boxplot,Pie,Page
theme_echart='infographic' location_list=['shanghai','chongqing','guangdong','beijing']
ans_vid={} for i in location_list:
ans_vid[i]=pd.read_hdf(i+'_charging.h5',encoding='gbk') location_list_chinese=['上海','重庆','广东','北京'];
for i in range(len(location_list_chinese)):
ans_vid[location_list_chinese[i]] = ans_vid.pop(location_list[i])

 

例:

这时候我们需要提取其中的时间序列统计所有vid的 充电状态为1的第一个时间和最后一个时间 即为该车的充电时长

代码如下:

page=Page()
for i in location_list_chinese:
ans_vid[i]=ans_vid[i][ans_vid[i]['充电状态']=='1.0']
temp1=ans_vid[i].drop_duplicates(['vid'],keep='last')
temp2=ans_vid[i].drop_duplicates(['vid'],keep='first')
a=temp2['上报时间']
b=temp1['上报时间']
a=a.reset_index()
b=b.reset_index()
a=a.drop(['index'],axis=1)
b=b.drop('index',axis=1)
a['上报时间']=a['上报时间'].astype(str)
a['上报时间']=a['上报时间'].apply(lambda v: v[0:4]+'-'+v[4:6]+'-'+v[6:8]+' '+v[8:10]+':'+v[10:12]+':'+v[12:14])
b['上报时间']=b['上报时间'].astype(str)
b['上报时间']=b['上报时间'].apply(lambda v: v[0:4]+'-'+v[4:6]+'-'+v[6:8]+' '+v[8:10]+':'+v[10:12]+':'+v[12:14])
b['上报时间']=pd.to_datetime(b['上报时间'])
a['上报时间']=pd.to_datetime(a['上报时间'])
temp=b['上报时间']-a['上报时间']
temp=pd.DataFrame(temp)
temp['上报时间']=temp['上报时间'].dt.total_seconds()/3600
temp['充电时长']=temp['上报时间'].astype(str)
temp['充电时长'][temp['上报时间']<=1]='<1h'
temp['充电时长'][(temp['上报时间']>1) & (temp['上报时间']<=4)]='1-4h'
temp['充电时长'][(temp['上报时间']>4) & (temp['上报时间']<=8)]='4-8h'
temp['充电时长'][temp['上报时间']>8]='>8h'
local_charging_time=temp['充电时长'].value_counts()
box=Boxplot(i+'地区充电时长统计')
pie=Pie(i+'地区充电时长统计')
box.use_theme(theme_echart)
pie.use_theme(theme_echart)
# kwargs = dict(name = i,
# x_axis = list(local_charging_time.index),
# y_axis = list(local_charging_time.values),
# is_legend_show=False,
# is_label_show=True
# )
# bar.add(**kwargs)
x=list(local_charging_time.index);
y=list(local_charging_time.values);
pie.add("",x,y,radius=(40,75),
is_label_show=True,legend_orient = 'vertical',
legend_pos = 'left',legend_top='center')
# box画图
y_axis =[]
for j in x:
y_axis.append(list(temp['上报时间'][temp['充电时长']==j]))
y=box.prepare_data(y_axis)
box.add(i+'地区各充电时长分布', x, y,xaxis_name='',
yaxis_name='充电时长[h]',is_legend_show=True,legend_pos='right',is_label_show=True,yaxis_name_gap=45,xaxis_type='category',xaxis_rotate=0)
page.add(pie)
page.add(box)
del box,pie page.render('北上广重地区充电时长统计_v2.html')

  可以看到核心处理程序是pd.to_datetime(a['上报时间']) 转化为时间格式之后 用两列相减得到时间差格式的temp

  temp['上报时间']=temp['上报时间'].dt.total_seconds()/3600 # 此处提取时间差格式的秒数, 再折算成小时

结果如下图:

一个相似的例子是需要统计这四个地区的充电开始时段的分布(根据电网电价的需求而来)

核心是将连续的时间格式字符Series集成转化成时间格式,即'20190101235502'转化成 2019-01-01 23:55:02

代码:

a['上报时间']=a['上报时间'].apply(lambda v: v[0:4]+'-'+v[4:6]+'-'+v[6:8]+' '+v[8:10]+':'+v[10:12]+':'+v[12:14]) # 整列按照既定方法修改

然后调用pd.to_datetime

pandas时间数据的集成处理的更多相关文章

  1. pandas小记:pandas时间序列分析和处理Timeseries

    http://blog.csdn.net/pipisorry/article/details/52209377 其它时间序列处理相关的包 [P4J 0.6: Periodic light curve ...

  2. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...

  3. Pandas DataFrame数据的增、删、改、查

    Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...

  4. pandas外部数据的读取构造数据框-文本文件读取(一种utf-8中文编码乱码处理经验)

    上面一篇文章有记录pandas构造数据框的方式有二维数组,字典,嵌套的列表和元组等,本篇用于介绍通过外部数据读取的方式来构造数据框. python读取外部数据集的时候,这些数据集可能包含在文本文件(c ...

  5. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  6. 【转载】使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas对数据进行筛选和排序 目录: sort() 对单列数据进行排序 对多列数据进行排序 获取金额最小前10项 ...

  7. 【转载】使用Pandas进行数据提取

    使用Pandas进行数据提取 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据提取 目录 set_index() ix 按行提取信息 按列提取信息 按行与列提取信息 提取特定日期的信 ...

  8. 【转载】使用Pandas进行数据匹配

    使用Pandas进行数据匹配 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas进行数据匹配 目录 merge()介绍 inner模式匹配 lefg模式匹配 right模式匹配 outer模式 ...

  9. 【转载】使用Pandas创建数据透视表

    使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...

随机推荐

  1. 引入clipboard.js

    引入clipboard.js var clipboardJS = new ClipboardJS('#accept-data'); // 括号内的是选择器

  2. 《java学习三》并发编程 -------线程池原理剖析

    阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到 ...

  3. 从一个LocalDateTime引发的疑问

    一 公司有同事部署出错,然后查日志,找时间,从k8s得到的时间是  2017-06-16T09:38:48.580 +0000,然后他就纳闷了,因为他根本不会在9点部署好吧,而且9点大多数程序员都没开 ...

  4. centOS 下开启端口号

    firewall-cmd --zone=public --add-port=80/tcp --permanent permanent参数表示永久生效 更新防火墙规则  firewall-cmd --r ...

  5. Java基础语法(Eclipse)

    Java基础语法 今日内容介绍 u Eclipse开发工具 u 超市库存管理系统 第1章 Eclipse开发工具 Eclipse是功能强大Java集成开发工具.它可以极大地提升我们的开发效率.可以自动 ...

  6. 行框基线位置确定(line box 基线)

    在设置vertical-align属性(只有inline元素有效,对inline-block和block元素无效)时有一个属性值:baseline,那么这个基线是什么,怎么确定. 这个基线就是其所在行 ...

  7. 系统有问题基本出在数据库上,web层无状态

    系统有问题基本出在数据库上,web层无状态.

  8. vue分环境打包配置不同命令

    1.安装cross-env (cross-env能跨平台地设置及使用环境变量)cnpm/npm  i  cross-env -D 2.新建模板 红色的为相关文件 3.配置各个文件 (1)config下 ...

  9. 从SAP客户主数据里直接创建商机(Opportunity)

    在SAP CRM Fiori的Account应用里,直接在Account页面创建商机: 在SAP Cloud for Customer里: 要获取更多Jerry的原创文章,请关注公众号"汪子 ...

  10. thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例

    1.  要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql   为例: 数据库InnoDB支持 transactions 数据表支持事务:InnoDB  支持transaction ...