有时要处理不同时间的数据,比如对其按日、月、年进行分析。Pandas提供了便捷的方法做这类分析,常用的方法有重新采样、时区设置、周期转换等。
- 重新采样:使用
resample
方法对原始数据以某个新的频率进行采样,再进行聚合运算。 - 时区设置:默认生成的时间不带时区(naive),可应对其进行时区设置(
tz_localize
)与转换(tz_convert
)。 - 周期转换:可以将某个时点的数据,用
to_period
方法转化为其所在的周期,以进行周期性分析。
先生成相关数据,以在下文在做演示
# 生成100天DatetimeIndex
rng = pd.date_range("1/1/2021",
periods=100,
freq="D")
# 生成值为0-500之间的随机数的Series
ts = pd.Series(
np.random.randint(0, 500, len(rng)
), index=rng)
ts
1. 重新采样
可以设置想要的采样规则(一般是某个时间间隔Timedelta
或相关的字符串表达式),通过resample
方法对数据进行重新采样。采样完成之后,可以对其执行聚合运算,以获利预期的分析结果。分析时既可以使用自带的聚合函数,也可以使用自定义的聚合函数。
1.1 使用自带的函数
对样本数据,每隔10天进行重新采样,并计算算术平均值。以下两个语句执行结果相同
ts.resample("10D").mean()
# label 参数设置index的值,
# 以区间最左边的值作为结果的index
# closed 参数设置left以左闭右开方式运算
ts.resample("10D",
label="left",
closed="left").mean()
1.2 使用自定义的函数
与上一步骤做相同运算,区别是使用apply
的方法,此方法即可使用自定义的函数。
ts.resample("10D").apply(np.mean)
2. 时区设置
默认生成的时间不带时区,可以使用tz_localize
设置其本地时区,然后也可以使用tz_convert
对其进行时区转换,以满足国际业务。
2.1 设置时区
将样本数据的时区设置为UTC
ts_utc = ts.tz_localize("UTC")
ts_utc
2.2 时区转换
可以对设置过时区的数据,进行时区转换。将上一步骤的结果数据的时区转为上海。
3. 周期转换
可以将某个时点的数据,用to_period
方法转换为某个期间。此方法可以知道其所在月份、星期等。
3.1 转为星期周期
# index转为其所在的星期(PeriodIndex)
ps = ts.to_period("W")
ps
3.2 转为时点
# 以周期结束时间作为结果的index
ps.to_timestamp(how="end")