python+pandas+时间、日期以及时间序列处理方法

 更新时间:2018年07月10日 09:29:03   作者:LY_ysys629  
今天小编就为大家分享一篇python+pandas+时间、日期以及时间序列处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

先简单的了解下日期和时间数据类型及工具

python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。

datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差。

给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象

from datetime import datetime
from datetime import timedelta
now = datetime.now()
now
datetime.datetime(2017, 6, 27, 15, 56, 56, 167000)
datetime参数:datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
delta = now - datetime(2017,6,27,10,10,10,10)
delta
datetime.timedelta(0, 20806, 166990)
delta.days
 0
delta.seconds
 20806
delta.microseconds
 166990

只有这三个参数了!

datetime模块中的数据类型

类型 说明
date 以公历形式存储日历日期(年、月、日)
time 将时间存储为时、分、秒、毫秒
datetime 存储日期和时间
timedelta 表示两个datetime值之间的差(日、秒、毫秒)

字符串和datetime的相互转换

1)python标准库函数

日期转换成字符串:利用str 或strftime

字符串转换成日期:datetime.strptime

stamp = datetime(2017,6,27)
str(stamp)
 '2017-06-27 00:00:00'
stamp.strftime('%y-%m-%d')#%Y是4位年,%y是2位年
 '17-06-27'
#对多个时间进行解析成字符串
date = ['2017-6-26','2017-6-27']
datetime2 = [datetime.strptime(x,'%Y-%m-%d') for x in date]
datetime2
[datetime.datetime(2017, 6, 26, 0, 0), datetime.datetime(2017, 6, 27, 0, 0)]

2)第三方库dateutil.parser的时间解析函数

from dateutil.parser import parse
parse('2017-6-27')
 datetime.datetime(2017, 6, 27, 0, 0)
parse('27/6/2017',dayfirst =True)
 datetime.datetime(2017, 6, 27, 0, 0)

3)pandas处理成组日期

pandas通常用于处理成组日期,不管这些日期是DataFrame的轴索引还是列,to_datetime方法可以解析多种不同的日期表示形式。

date
 ['2017-6-26', '2017-6-27']
import pandas as pd
pd.to_datetime(date)
 DatetimeIndex(['2017-06-26', '2017-06-27'], dtype='datetime64[ns]', freq=None)

datetime 格式定义

代码 说明
%Y 4位数的年
%y 2位数的年
%m 2位数的月[01,12]
%d 2位数的日[01,31]
%H 时(24小时制)[00,23]
%l 时(12小时制)[01,12]
%M 2位数的分[00,59]
%S 秒[00,61]有闰秒的存在
%w 用整数表示的星期几[0(星期天),6]
%F %Y-%m-%d简写形式例如,2017-06-27
%D %m/%d/%y简写形式

pandas时间序列基础以及时间、日期处理

pandas最基本的时间序列类型就是以时间戳(时间点)(通常以python字符串或datetime对象表示)为索引的Series:

dates = ['2017-06-20','2017-06-21',\
  '2017-06-22','2017-06-23','2017-06-24','2017-06-25','2017-06-26','2017-06-27']
import numpy as np
ts = pd.Series(np.random.randn(8),index = pd.to_datetime(dates))
ts
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64
ts.index
 DatetimeIndex(['2017-06-20', '2017-06-21', '2017-06-22', '2017-06-23',
   '2017-06-24', '2017-06-25', '2017-06-26', '2017-06-27'],
   dtype='datetime64[ns]', freq=None)

pandas不同索引的时间序列之间的算术运算会自动按日期对齐

ts[::2]#从前往后每隔两个取数据
 2017-06-20 0.788811
 2017-06-22 0.009967
 2017-06-24 0.981214
 2017-06-26 -0.127258
 dtype: float64
ts[::-2]#从后往前逆序每隔两个取数据
 2017-06-27 1.919773
 2017-06-25 0.314127
 2017-06-23 -1.024626
 2017-06-21 0.372555
 dtype: float64
ts + ts[::2]#自动数据对齐
 2017-06-20 1.577621
 2017-06-21  NaN
 2017-06-22 0.019935
 2017-06-23  NaN
 2017-06-24 1.962429
 2017-06-25  NaN
 2017-06-26 -0.254516
 2017-06-27  NaN
 dtype: float64

索引为日期的Series和DataFrame数据的索引、选取以及子集构造

方法:

1).index[number_int]

2)[一个可以被解析为日期的字符串]

3)对于,较长的时间序列,只需传入‘年'或‘年月'可返回对应的数据切片

4)通过时间范围进行切片索引

ts
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64


ts[ts.index[2]]
 0.0099673896063391908
ts['2017-06-21']#传入可以被解析成日期的字符串
 0.37255538918121028
ts['21/06/2017']
 0.37255538918121028
ts['20170621']
 0.37255538918121028
ts['2017-06']#传入年或年月
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 2017-06-24 0.981214
 2017-06-25 0.314127
 2017-06-26 -0.127258
 2017-06-27 1.919773
 dtype: float64


ts['2017-06-20':'2017-06-23']#时间范围进行切片
 2017-06-20 0.788811
 2017-06-21 0.372555
 2017-06-22 0.009967
 2017-06-23 -1.024626
 dtype: float64

带有重复索引的时间序列

1).index.is_unique检查索引日期是否是唯一的

2)对非唯一时间戳的数据进行聚合,通过groupby,并传入level = 0(索引的唯一一层)

dates = pd.DatetimeIndex(['2017/06/01','2017/06/02','2017/06/02','2017/06/02','2017/06/03'])
dates
 DatetimeIndex(['2017-06-01', '2017-06-02', '2017-06-02', '2017-06-02',
   '2017-06-03'],
   dtype='datetime64[ns]', freq=None)

dup_ts = pd.Series(np.arange(5),index = dates)
dup_ts
 2017-06-01 0
 2017-06-02 1
 2017-06-02 2
 2017-06-02 3
 2017-06-03 4
 dtype: int32

dup_ts.index.is_unique
 False
dup_ts['2017-06-02']
 2017-06-02 1
 2017-06-02 2
 2017-06-02 3
 dtype: int32

grouped = dup_ts.groupby(level=0).mean()
grouped
 2017-06-01 0
 2017-06-02 2
 2017-06-03 4
 dtype: int32

dup_df = pd.DataFrame(np.arange(10).reshape((5,2)),index = dates )
dup_df

0 1
2017-06-01 0 1
2017-06-02 2 3
2017-06-02 4 5
2017-06-02 6 7
2017-06-03 8 9

grouped_df = dup_df.groupby(level=0).mean()##针对DataFrame
grouped_df

0 1
2017-06-01 0 1
2017-06-02 4 5
2017-06-03 8 9

总结

该篇博客主要内容:

1)字符串、日期的转换方法

2)日期和时间的主要python,datetime、timedelta、pandas.to_datetime等

3)以时间为索引的Series和DataFrame的索引、切片

4)带有重复时间索引时的索引,.groupby(level=0)应用

以上这篇python+pandas+时间、日期以及时间序列处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python+OpenCV实现车牌字符分割和识别

    Python+OpenCV实现车牌字符分割和识别

    这篇文章主要为大家详细介绍了Python+OpenCV实现车牌字符分割和识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Django auth 应用模块详解

    Django auth 应用模块详解

    这篇文章主要介绍了Django auth 应用模块,auth 模块帮助开发人员提高了工作效率,因为每个 Web 站点的权限管理模块或者用户管理模块基本都是相同的逻辑,Django 的 auth 模块使开发者们不必在为一些重复性的逻辑进行构建,需要的朋友可以参考下
    2022-11-11
  • Python pydotplus安装及可视化图形创建教程

    Python pydotplus安装及可视化图形创建教程

    这篇文章主要为大家介绍了Python pydotplus安装及可视化图形创建教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Python中axis=0与axis=1指的方向有什么不同详解

    Python中axis=0与axis=1指的方向有什么不同详解

    对数据进行操作时,经常需要在横轴方向或者数轴方向对数据进行操作,这时需要设定参数axis的值,下面这篇文章主要给大家介绍了关于Python中axis=0与axis=1指的方向有什么不同的相关资料,需要的朋友可以参考下
    2024-01-01
  • 解决Jupyter Notebook “signal only works in main thread“问题

    解决Jupyter Notebook “signal only works&nb

    这篇文章主要介绍了解决Jupyter Notebook “signal only works in main thread“问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 谈谈如何手动释放Python的内存

    谈谈如何手动释放Python的内存

    Python不会自动清理这些内存,这篇文章主要介绍了谈谈如何手动释放Python的内存,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • 在tensorflow中设置使用某一块GPU、多GPU、CPU的操作

    在tensorflow中设置使用某一块GPU、多GPU、CPU的操作

    今天小编就为大家分享一篇在tensorflow中设置使用某一块GPU、多GPU、CPU的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • selenium+python自动化测试环境搭建步骤

    selenium+python自动化测试环境搭建步骤

    在本文中小编给大家分享了关于selenium+python自动化测试环境搭建的相关步骤以及知识点内容,需要的朋友们参考学习下。
    2019-06-06
  • PyPDF2读取PDF文件内容保存到本地TXT实例

    PyPDF2读取PDF文件内容保存到本地TXT实例

    这篇文章主要介绍了PyPDF2读取PDF文件内容保存到本地TXT实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 使用python批量化音乐文件格式转换的实例

    使用python批量化音乐文件格式转换的实例

    今天小编就为大家分享一篇使用python批量化音乐文件格式转换的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01

最新评论