Pandas的时间序列操作基础

  • Post category:Python

Pandas是Python中常用的数据分析库之一,有丰富的时间序列数据操作功能。下面给出Pandas中常用的时间序列操作基础攻略:

时间序列的创建

使用Pandas创建时间序列时,首先需要创建一个时间索引,然后将每个时间索引和对应的数据连成一个时间序列对象。时间索引可以是Python中的datetime对象,也可以是字符串或者时间戳,但是需要使用Pandas中的to_datetime()函数或者date_range()函数转换成Pandas中的时间索引。

使用datetime对象创建时间序列

import pandas as pd
import datetime

dates = [datetime.datetime(2019, 1, 1), datetime.datetime(2019, 1, 2), datetime.datetime(2019, 1, 3)]
data = [1, 2, 3]
ts = pd.Series(data, index=dates)
print(ts)

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
dtype: int64

使用字符串创建时间序列

dates = ['2019-01-01', '2019-01-02', '2019-01-03']
data = [1, 2, 3]
ts = pd.Series(data, index=pd.to_datetime(dates))
print(ts)

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
dtype: int64

使用时间戳创建时间序列

timestamps = [1546300800, 1546387200, 1546473600]
data = [1, 2, 3]
ts = pd.Series(data, index=pd.to_datetime(timestamps, unit='s'))
print(ts)

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
dtype: int64

使用date_range创建固定频率的时间序列

dt_index = pd.date_range('2019-01-01', periods=3, freq='D')
data = [1, 2, 3]
ts = pd.Series(data, index=dt_index)
print(ts)

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
Freq: D, dtype: int64

时间序列的索引和切片

在创建好时间序列后,我们可以使用Pandas中的标准索引方式对时间序列进行索引和切片。Pandas中的时间序列有很多不同的属性,可以用来实现各种功能。

ts = pd.Series([1, 2, 3, 4], index=pd.date_range('20190101', periods=4))
print(ts)

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
2019-01-04    4
Freq: D, dtype: int64

根据时间索引选择数据

print(ts['20190102'])

输出:

2

根据时间范围选择数据

print(ts['20190102':'20190104'])

输出:

2019-01-02    2
2019-01-03    3
2019-01-04    4
Freq: D, dtype: int64

时间序列的切片和过滤

print(ts[:'20190102'])
print(ts[ts > 2])

输出:

2019-01-01    1
2019-01-02    2
Freq: D, dtype: int64

2019-01-03    3
2019-01-04    4
Freq: D, dtype: int64

时间序列的操作

时间偏置和滑动窗口

ts = pd.Series([1, 2, 3, 4], index=pd.date_range('20190101', periods=4))
print(ts)

# 时间向下偏置一天,并向上滑动一个窗口
print(ts.shift(-1))
print(ts.shift(-1, freq=pd.offsets.Day(1)))
print(ts.rolling(window=2).sum())

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
2019-01-04    4
Freq: D, dtype: int64

2019-01-01    2.0
2019-01-02    3.0
2019-01-03    4.0
2019-01-04    NaN
Freq: D, dtype: float64

2019-01-02    1
2019-01-03    2
2019-01-04    3
2019-01-05    4
dtype: int64

2019-01-01     NaN
2019-01-02     3.0
2019-01-03     5.0
2019-01-04     7.0
Freq: D, dtype: float64

时间延迟和频率转换

ts = pd.Series([1, 2, 3, 4], index=pd.date_range('20190101', periods=4))
print(ts)

# 时间向下延迟一天,并转换为周频率
print(ts.resample('W').ffill())

输出:

2019-01-01    1
2019-01-02    2
2019-01-03    3
2019-01-04    4
Freq: D, dtype: int64

2019-01-06    1
2019-01-13    2
2019-01-20    3
2019-01-27    4
Freq: W-SUN, dtype: int64

日期时间元素的访问和截取

ts = pd.Series([1, 2, 3, 4], index=pd.date_range('20190101', periods=4))
print(ts.index.year)
print(ts.index.month)
print(ts.index.day)

输出:

Int64Index([2019, 2019, 2019, 2019], dtype='int64')

Int64Index([1, 1, 1, 1], dtype='int64')

Int64Index([1, 2, 3, 4], dtype='int64')

这些就是Pandas中时间序列操作的基础,希望可以帮助你更好地分析和处理时间序列数据。