当前位置 : 主页 > 编程语言 > java >

pands中的日期和时间操作

来源:互联网 收集:自由互联 发布时间:2022-06-23
pandas中提供了以下4种类型的日期和时间操作方法 其中,Date Time用于表示某个具体的时间点,Time spans用于生成时间间隔相同的时间序列;Time deltas表示时间间隔,Date offsets则表示日期间


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

pands中的日期和时间操作_时间序列

其中,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·


pands中的日期和时间操作_时间序列_02

一个只分享干货的

生信公众号


上一篇:pandas中的数据处理利器-groupby
下一篇:没有了
网友评论