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 ...
随机推荐
- ES6新特性使用小结(三)
九.数据类型 Symbol /* * Symbol 数据类型 概念: Symbol 提供一个独一无二的值 * */ { let a1 = Symbol(); let a2 = Symbol(); co ...
- P2184 贪婪大陆 树状数组
树状数组帅炸了....又被一道水题轻虐,又被学长指出了一个错误....我太菜了QAQ 开两个树状数组,一个记录左端点,一个记录右端点: 共有cnt(总数) - (<l的右端点数目) - (> ...
- Jmeter将JDBC Request查询结果作为下一个接口参数方法
现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口. tieba_ ...
- Spring Task ABC
配置说明 <task:annotation-driven scheduler="xxxScheduler" /> <task:scheduler id=" ...
- 手动添加日期到mysql数据库
//获得jsp页面上的数据 String dates=request.getParameter("dates"); //使用预定格式将日期转换为字符串 SimpleDateForm ...
- JVM垃圾回收机制四
GCRoots与可达性分析 Java中的四种引用 强引用.软引用.弱引用.虚引用.这四种引用的强度是逐渐减弱的,JVM垃圾回收的力度是逐渐增强的. 四种引用的作用 1.可以让程序员通过代码来控制对象的 ...
- ABAP自定义功能函数
1.实现计算器中阶乘函数 FUNCTION zfun_mm_001. *"---------------------------------------------------------- ...
- Nmap安全扫描程序
Nmap安全扫描程序 下载地址:https://nmap.org/download.html#windows 参考手册:https://nmap.org/man/zh/index.html#man-d ...
- IT届常用单词读法纠正
Bootstrap ['bʊt'stræp] Java ['dʒɑːvə] Node [nod] @ [æt; ət] Common ['kɑmən] Java ...
- C#中静态成员和实例变量
昨天晚上看静态成员和实例变量的时候,看到这样的一句话:默认情况下,若成员被定义为实例变量,这就意味着类需要为每个实例都建立一个副本,而在定义一个静态变量的时候,只存在此成员的一个副本. 呵呵,今天跟前 ...