前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python+pandas+时间、日期以及时间序列处理方法

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

作者头像
公众号---人生代码
发布2019-08-30 21:53:15
1.6K0
发布2019-08-30 21:53:15
举报
文章被收录于专栏:人生代码

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

先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差。给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象

代码语言:javascript
复制
from datetime import datetimefrom datetime import timedeltanow = datetime.now()nowdatetime.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)deltadatetime.timedelta(0, 20806, 166990)delta.days 0delta.seconds 20806delta.microseconds 166990

只有这三个参数了!datetime模块中的数据类型

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

字符串和datetime的相互转换

1)python标准库函数 日期转换成字符串:利用str 或strftime 字符串转换成日期:datetime.strptime

代码语言:javascript
复制
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的时间解析函数

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

代码语言:javascript
复制
date ['2017-6-26', '2017-6-27']import pandas as pdpd.to_datetime(date) DatetimeIndex(['2017-06-26', '2017-06-27'], dtype='datetime64[ns]', freq=None)

datetime 格式定义

代码语言:javascript
复制
代码    说明%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:

代码语言:javascript
复制
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 npts = 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: float64ts.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不同索引的时间序列之间的算术运算会自动按日期对齐

代码语言:javascript
复制
ts[::2]#从前往后每隔两个取数据 2017-06-20 0.788811 2017-06-22 0.009967 2017-06-24 0.981214 2017-06-26 -0.127258 dtype: float64ts[::-2]#从后往前逆序每隔两个取数据 2017-06-27 1.919773 2017-06-25 0.314127 2017-06-23 -1.024626 2017-06-21 0.372555 dtype: float64ts + 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数据的索引、选取以及子集构造

代码语言:javascript
复制
方法:1).index[number_int]2)[一个可以被解析为日期的字符串]3)对于,较长的时间序列,只需传入‘年'或‘年月'可返回对应的数据切片4)通过时间范围进行切片索引
代码语言:javascript
复制
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: float64ts[ts.index[2]] 0.0099673896063391908ts['2017-06-21']#传入可以被解析成日期的字符串 0.37255538918121028ts['21/06/2017'] 0.37255538918121028ts['20170621'] 0.37255538918121028ts['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: float64ts['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(索引的唯一一层)

代码语言:javascript
复制
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: int32dup_ts.index.is_unique Falsedup_ts['2017-06-02'] 2017-06-02 1 2017-06-02 2 2017-06-02 3 dtype: int32grouped = dup_ts.groupby(level=0).mean()grouped 2017-06-01 0 2017-06-02 2 2017-06-03 4 dtype: int32dup_df = pd.DataFrame(np.arange(10).reshape((5,2)),index = dates )dup_df
代码语言:javascript
复制
0    12017-06-01    0   12017-06-02    2   32017-06-02    4   52017-06-02    6   72017-06-03    8   9
代码语言:javascript
复制
grouped_df = dup_df.groupby(level=0).mean()##针对DataFramegrouped_df

总结

代码语言:javascript
复制
1)字符串、日期的转换方法2)日期和时间的主要python,datetime、timedelta、pandas.to_datetime等3)以时间为索引的Series和DataFrame的索引、切片4)带有重复时间索引时的索引,.groupby(level=0)应用
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python+pandas+时间、日期以及时间序列处理方法
    • 字符串和datetime的相互转换
      • 2)第三方库dateutil.parser的时间解析函数
        • datetime 格式定义
          • pandas时间序列基础以及时间、日期处理
            • pandas不同索引的时间序列之间的算术运算会自动按日期对齐
              • 索引为日期的Series和DataFrame数据的索引、选取以及子集构造
                • 带有重复索引的时间序列
                  • 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档