📅  最后修改于: 2023-12-03 14:56:12.147000             🧑  作者: Mango
熊猫是一个用于数据处理和数据分析的Python库。它被广泛应用在金融、经济、统计等领域。其中,熊猫对于时间序列的分析具有很强的优势。
首先,让我们导入pandas
库:
import pandas as pd
接下来,我们可以使用pd.date_range
函数来创建一个时间序列:
ts = pd.date_range(start='2021-01-01', end='2021-01-10', freq='D')
print(ts)
输出结果如下所示:
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
'2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08',
'2021-01-09', '2021-01-10'],
dtype='datetime64[ns]', freq='D')
我们可以使用pd.Timestamp
函数将字符串转换为时间戳:
timestamp = pd.Timestamp('2021-01-01')
print(timestamp)
输出结果如下所示:
2021-01-01 00:00:00
在时间序列中,我们通常使用时间戳作为索引。因此,我们可以使用[]
和loc
方法来进行索引:
data = {
'2021-01-01': 10,
'2021-01-02': 20,
'2021-01-03': 30,
'2021-01-04': 40,
'2021-01-05': 50
}
ts = pd.Series(data)
print(ts)
# 使用[]
print(ts['2021-01-01'])
# 使用loc方法
print(ts.loc['2021-01-01':'2021-01-03'])
输出结果如下所示:
2021-01-01 10
2021-01-02 20
2021-01-03 30
2021-01-04 40
2021-01-05 50
dtype: int64
10
2021-01-01 10
2021-01-02 20
2021-01-03 30
dtype: int64
在熊猫中,可以使用各种函数来进行时间序列的运算。例如:
# 时间加法
ts = pd.Timestamp('2021-01-01 12:00:00')
ts = ts + pd.Timedelta('1 day 2 hours')
print(ts)
# 时间减法
ts = pd.Timestamp('2021-01-01 12:00:00')
ts = ts - pd.Timedelta('1 day 2 hours')
print(ts)
# 时间差
ts1 = pd.Timestamp('2021-01-01 12:00:00')
ts2 = pd.Timestamp('2021-01-02 12:00:00')
print(ts2 - ts1)
# 时间段
ts = pd.Timestamp('2021-01-01 12:00:00')
ts = ts + pd.offsets.MonthEnd()
print(ts)
输出结果如下所示:
2021-01-02 14:00:00
2020-12-31 10:00:00
1 days 00:00:00
2021-01-31 12:00:00
在时间序列中,我们可以使用resample
方法来进行重采样。例如,我们可以将日频率的时间序列转换为月频率的时间序列:
data = {
'2021-01-01': 10,
'2021-01-02': 20,
'2021-01-03': 30,
'2021-02-01': 40,
'2021-02-02': 50,
'2021-02-03': 60
}
ts = pd.Series(data)
ts.index = pd.to_datetime(ts.index)
# 将日频率的时间序列转换为月频率的时间序列
monthly_ts = ts.resample('M').sum()
print(monthly_ts)
输出结果如下所示:
2021-01-31 60
2021-02-28 150
Freq: M, dtype: int64
移动窗口是时间序列分析中常用的方法之一。在熊猫中,我们可以使用rolling
方法来创建一个滑动窗口,并进行相应的操作。例如,我们可以计算一个3天滑动窗口内的均值:
data = {
'2021-01-01': 10,
'2021-01-02': 20,
'2021-01-03': 30,
'2021-01-04': 40,
'2021-01-05': 50,
'2021-01-06': 60,
'2021-01-07': 70
}
ts = pd.Series(data)
ts.index = pd.to_datetime(ts.index)
# 计算一个3天滑动窗口内的均值
rolling_mean = ts.rolling(window=3).mean()
print(rolling_mean)
输出结果如下所示:
2021-01-01 NaN
2021-01-02 NaN
2021-01-03 20.000000
2021-01-04 30.000000
2021-01-05 40.000000
2021-01-06 50.000000
2021-01-07 60.000000
dtype: float64