前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pands中的日期和时间操作

pands中的日期和时间操作

作者头像
生信修炼手册
发布2020-07-16 10:38:41
2.1K0
发布2020-07-16 10:38:41
举报
文章被收录于专栏:生信修炼手册生信修炼手册

pandas中提供了以下4种类型的日期和时间操作方法

其中,Date Time用于表示某个具体的时间点,Time spans用于生成时间间隔相同的时间序列;Time deltas表示时间间隔,Date offsets则表示日期间隔,这二者的作用都是用于时间运算,通过时间点+时间间隔的方式,得到新的时间点。

1. Date times

Date times类似内置模块datetime, 提供了带时区的日期时间,也称为为时间戳。单个时间戳可以通过Timestamp函数直接生成,用法如下

代码语言:javascript
复制
>>> pd.Timestamp('2020-07-01')
Timestamp('2020-07-01 00:00:00')

>>> pd.Timestamp(2020, 7, 1)
Timestamp('2020-07-01 00:00:00')

对于多个时间戳,可以通过to_datetime和date_range方法产生,用法如下

代码语言:javascript
复制
>>> import datetime
>>> pd.to_datetime(['2020-07-01', '2020-07-02', '2020-07-03'])
DatetimeIndex(['2020-07-01', '2020-07-02', '2020-07-03'], dtype='datetime64[ns]', freq=None)

>>> pd.date_range('2018-07-01', periods=3, freq='D')
DatetimeIndex(['2018-07-01', '2018-07-02', '2018-07-03'], dtype='datetime64[ns]', freq='D')

to_datetime函数将列表中的元素转换为DatetimeIndex对象,而date_range函数提供了以起始时间为原点,产生等量偏移的时间序列的方法,其中periods参数指定生成的时间序列的长度,freq参数指定偏移的时间量,该参数有非常多种取值,部分示例如下

代码语言:javascript
复制
# 按天
>>> pd.date_range('2018-01-01', periods=3, freq='D')
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03'], dtype='datetime64[ns]', freq='D')

# 按一周,即7天
>>> pd.date_range('2018-01-01', periods=3, freq='W')
DatetimeIndex(['2018-01-07', '2018-01-14', '2018-01-21'], dtype='datetime64[ns]', freq='W-SUN')

# 按小时
>>> pd.date_range('2018-01-01', periods=3, freq='H')
DatetimeIndex(['2018-01-01 00:00:00', '2018-01-01 01:00:00',
               '2018-01-01 02:00:00'],
              dtype='datetime64[ns]', freq='H')

完整的参数列表请查阅官方的API文档。

2. Time spans

Time spans用于生成时间间隔相同的时间序列,基本用法如下

代码语言:javascript
复制
>>> pd.Period('2020-07-01')
Period('2020-07-01', 'D')

>>> pd.PeriodIndex(['2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04'], freq='D')
PeriodIndex(['2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04'], dtype='period[D]', freq='D')
```

还可以通过period_range函数来生成时间序列,用法如下

```
>>> pd.period_range(start='2020-07-01', end='2020-07-04', freq='D')
PeriodIndex(['2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04'], dtype='period[D]', freq='D')

>>> pd.period_range(start='2020-07-01', freq='D', periods=4)
PeriodIndex(['2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04'], dtype='period[D]', freq='D')

第一种用法同时指定起始和终止的时间点,用freq参数指定时间间隔;第二种用法只指定时间起点,通过periods参数控制时间序列的长度,freq参数指定时间间隔。

3. Time deltas

Time Deltas表示时间间隔, 时间间隔的单位有day, hour等,用Timedelta函数指定,用法如下

代码语言:javascript
复制
>>> pd.Timedelta('1 day')
Timedelta('1 days 00:00:00')

另外,还可以通过to_timedelta和timedelta_range函数生成时间间隔,用法如下

代码语言:javascript
复制
>>> pd.to_timedelta('12H')
Timedelta('0 days 12:00:00')

>>> pd.to_timedelta('1day')
Timedelta('1 days 00:00:00')

>>> pd.timedelta_range(start='1 day', periods=4)
TimedeltaIndex(['1 days', '2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq='D')

>>> pd.timedelta_range(start='1 day', periods=4, closed='right')
TimedeltaIndex(['2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq='D')

>>> pd.timedelta_range(start='1 day', periods=4, freq='12H')
TimedeltaIndex(['1 days 00:00:00', '1 days 12:00:00', '2 days 00:00:00',
                '2 days 12:00:00'],
               dtype='timedelta64[ns]', freq='12H')

时间间隔的作用是在时间起点的基础上,通过时间运算,得到新的时间点,示例如下

代码语言:javascript
复制
>>> pd.Timedelta('1 day') + pd.Timestamp('2020-07-01')
Timestamp('2020-07-02 00:00:00')

4. Date offsets

Date offsets的作用和Time delta类似,只不过一个是时间的间隔,一个是日期的间隔,基本方法如下

代码语言:javascript
复制
>>> pd.DateOffset(1)
<DateOffset>
>>> pd.DateOffset(2)
<2 * DateOffsets>

单位是day, 即1天,所以下面两种写法是等价的

代码语言:javascript
复制
>>> pd.Timestamp('2020-07-01') + pd.DateOffset(1)
Timestamp('2020-07-02 00:00:00')

>>> pd.Timestamp('2020-07-01') + pd.Timedelta('1 day')
Timestamp('2020-07-02 00:00:00')

以上就是pandas中时间和日期操作的4种方法,根据需要可以灵活选择,更多关于时间操作的函数用法请查阅官方API。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档