pandas时间数据的集成处理
工作中遇到的一个问题: 统计各地区新能源汽车的充电时长 数据来源是北理新源的单日全球的运行数据。
这里仅统计北上广重庆四个地区的 数据处理的代码就省略了 需要整理好的是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时间数据的集成处理的更多相关文章
- pandas小记:pandas时间序列分析和处理Timeseries
http://blog.csdn.net/pipisorry/article/details/52209377 其它时间序列处理相关的包 [P4J 0.6: Periodic light curve ...
- pandas学习(数据分组与分组运算、离散化处理、数据合并)
pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
- pandas外部数据的读取构造数据框-文本文件读取(一种utf-8中文编码乱码处理经验)
上面一篇文章有记录pandas构造数据框的方式有二维数组,字典,嵌套的列表和元组等,本篇用于介绍通过外部数据读取的方式来构造数据框. python读取外部数据集的时候,这些数据集可能包含在文本文件(c ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 【转载】使用Pandas对数据进行筛选和排序
使用Pandas对数据进行筛选和排序 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas对数据进行筛选和排序 目录: sort() 对单列数据进行排序 对多列数据进行排序 获取金额最小前10项 ...
- 【转载】使用Pandas进行数据提取
使用Pandas进行数据提取 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据提取 目录 set_index() ix 按行提取信息 按列提取信息 按行与列提取信息 提取特定日期的信 ...
- 【转载】使用Pandas进行数据匹配
使用Pandas进行数据匹配 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas进行数据匹配 目录 merge()介绍 inner模式匹配 lefg模式匹配 right模式匹配 outer模式 ...
- 【转载】使用Pandas创建数据透视表
使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...
随机推荐
- Luogu P2257 YY的GCD 莫比乌斯反演
第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...
- yii2.0下,JqPaginator与load实现无刷新翻页
JqPaginator下载地址http://jqpaginator.keenwon.com/ 控制器部分: <?php namespace backend\controllers; use co ...
- 转 v$session_longops视图
转http://www.dbdream.com.cn/2013/10/14/vsession_longops%E8%A7%86%E5%9B%BE/ 1.有的时候不准确 ,我看到 session wai ...
- windows无法启动redis服务,错误码1067
https://blog.csdn.net/kissdead0xzy/article/details/84332870
- jdk1.6与jdk1.7list集合排序区别与算法
源码分析: 在Collections.sort中: public static <T extends Comparable<? super T>> void sort(L ...
- VS 解决方案文件结构分析
VS2013 解决方案文件结构分析 Visual Studio 的解决方案文件是一个文本文件,其中的内容不是太复杂,有些时候 Visual Studio 会把这个文件搞乱,理解一下这个文件的结构,对我 ...
- 2018年湘潭大学程序设计竞赛G又见斐波那契(矩阵快速幂)
题意 题目链接 Sol 直接矩阵快速幂 推出来的矩阵应该长这样 \begin{equation*}\begin{bmatrix}1&1&1&1&1&1\\1 & ...
- MyBatis关联查询、多条件查询
MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...
- linux命令行—《命令行快速入门》
pwd print working directory 打印工作目录 hostname my computer's network name 电脑在网络中的名称 mkdir make director ...
- MapReduce的编程思想(1)
MapReduce的编程思想(1) MapReduce的过程(2) 1. MapReduce采用分而治之的思想,将数据处理拆分为主要的Map(映射)与Reduce(化简)两步,MapReduce操作数 ...