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中时间序列操作的基础,希望可以帮助你更好地分析和处理时间序列数据。