pandas中提供了以下4种类型的日期和时间操作方法
其中,Date Time用于表示某个具体的时间点,Time spans用于生成时间间隔相同的时间序列;Time deltas表示时间间隔,Date offsets则表示日期间隔,这二者的作用都是用于时间运算,通过时间点+时间间隔的方式,得到新的时间点。
1. Date times
Date times类似内置模块datetime, 提供了带时区的日期时间,也称为为时间戳。单个时间戳可以通过Timestamp函数直接生成,用法如下
>>> 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方法产生,用法如下
>>> 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参数指定偏移的时间量,该参数有非常多种取值,部分示例如下
# 按天>>> 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用于生成时间间隔相同的时间序列,基本用法如下
>>> 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函数指定,用法如下
>>> pd.Timedelta('1 day')Timedelta('1 days 00:00:00')
另外,还可以通过to_timedelta和timedelta_range函数生成时间间隔,用法如下
>>> 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')
时间间隔的作用是在时间起点的基础上,通过时间运算,得到新的时间点,示例如下
>>> pd.Timedelta('1 day') + pd.Timestamp('2020-07-01')Timestamp('2020-07-02 00:00:00')
4. Date offsets
Date offsets的作用和Time delta类似,只不过一个是时间的间隔,一个是日期的间隔,基本方法如下
>>> pd.DateOffset(1)<DateOffset>
>>> pd.DateOffset(2)
<2 * DateOffsets>
单位是day, 即1天,所以下面两种写法是等价的
>>> 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。
·end·
一个只分享干货的
生信公众号