关于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[‘上报时间‘].dt.total_seconds()/3600 # 此处提取时间差格式的秒数, 再折算成小时

结果如下图:

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

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

然后调用pd.to_datetime

原文地址:https://www.cnblogs.com/techs-wenzhe/p/10931282.html

时间: 2024-11-03 23:58:59

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

【数据分析&amp;数据挖掘】pandas时间数据

1 import pandas as pd 2 """ 3 pandas默认支持的时间点类型——Timestamp 4 pandas默认支持的时间序列类型——DatetimeIndex 5 numpy默认支持的时间点数据类型——datetime64 6 """ 7 8 # 可以使用pd.to_datetime 将时间点转化为pandas默认支持的时间点类型 9 res = pd.to_datetime("2019-11-11"

Python数据分析库pandas ------ 初识 matpoltlib:matplotliab画图怎么显示中文;设置坐标标签;主题;画子图;pandas时间数据格式转化;图例;

打开画布,传入x,y的值,可以简单的画出曲线图 1 import matplotlib.pyplot as plt 2 3 c = [ 4 0.9012051747628913, 0.9012051747628913, 0.9012051747628913, 0.9012051747628913, 5 0.9012051747628913, 0.9012051747628913, 0.9012051747628913, 0.9012051747628913, 6 0.90120517476289

【Python数据分析】pandas时刻数据:Timestamp

目录 1.Timestamp 2.to_datetime 2.1 单个时间转化 2.2 多个时间转化 所谓的时刻数据代表时间点,是pandas的数据类型,是将值与时间点相关联的最基本类型的时间序列数据. 1.Timestamp Timestamp是将数据类型转化为pandas的Timestamp类型 import pandas as pd import datetime date1 = datetime.datetime(2019, 12, 31, 12, 1, 2) # 创建一个datetim

python Pandas 读取数据,写入文件

pandas 选取数据 iloc和 loc的用法不太一样,iloc是根据索引, loc是根据行的数值 >>> import pandas as pd >>> import os >>> os.chdir("D:\\") >>> d = pd.read_csv("GWAS_water.qassoc", delimiter= "\s+") >>> d.loc[1

mysql中获取一天、一周、一月时间数据的各种sql语句写法

今天抽时间整理了一篇mysql中与天.周.月有关的时间数据的sql语句的各种写法,部分是收集资料,全部手工整理,自己学习的同时,分享给大家,并首先默认创建一个表.插入2条数据,便于部分数据的测试,其中部分名词或函数进行了解释说明.直入主题! 创建表:create table if not exists t(   id int,   addTime datetime default ’0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, ’2012-07

SQLServer学习笔记&lt;&gt;日期和时间数据的处理(cast转化格式、日期截取、日期的加减)和 case表达式

日期和时间数据的处理. (1)字符串日期 ‘20080301’,这一串为字符串日期,但必须保证为四位的年份,两位的月份,两位的日期.例如,查询订单表日期大于‘20080301’.可以这样写: 1 select * from sales.orders 2 where orderdate>'20080301' 结果如图所示: (2)cast进行转化.例如,可以讲‘20080301’转化为时间类型.其结果跟上图一样. 1 select * from sales.orders 2 where order

在Jquery里格式化Date日期时间数据

在Jquery里格式化Date日期时间数据: $(function(){ //当前时间格式化yyyy-MM-dd HH:mm:ss alert(timeStamp2String(new Date().getTime())); alert(timeStamp3String(new Date().getTime())); debugger; }); //在Jquery里格式化Date日期时间数据 function timeStamp2String(time){ var datetime = new

Python,使用pandas保存数据为csv格式的文件

使用pandas对数据进行保存时,可以有两种形式进行保存 一.对于数据量不是很大的文件,可以放到列表中,进行一次性存储. 二.对于大量的数据,可以考虑一边生成,一边存储,可以避免开辟大量内存空间,去往列表中存储数据. 本人才疏学浅,只懂一些表面的东西,如有错误,望请指正! 下面通过代码进行说明 1 import pandas as pd 2 3 4 class SaveCsv: 5 6 def __init__(self): 7 self.clist = [[1,2,3], [4,5,6], [

pandas 日期时间数据的分割提取操作

import pandas as pd import numpy as np import time s=time.time() data_2019=pd.read_excel('d:\\data\\abc.xlsx') data=data_2019[['卡号','交易时间']] data['日期'] =data_2019['交易时间'].dt.date data['时间'] =data_2019['交易时间'].dt.time data['年'] = data_2019['交易时间'].dt.