Pandas之九时序数据

有时要处理不同时间的数据,比如对其按日、月、年进行分析。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

Pandas之九时序数据

1. 重新采样

可以设置想要的采样规则(一般是某个时间间隔Timedelta或相关的字符串表达式),通过resample方法对数据进行重新采样。采样完成之后,可以对其执行聚合运算,以获利预期的分析结果。分析时既可以使用自带的聚合函数,也可以使用自定义的聚合函数。

1.1 使用自带的函数

对样本数据,每隔10天进行重新采样,并计算算术平均值。以下两个语句执行结果相同

ts.resample("10D").mean()
# label 参数设置index的值,
#     以区间最左边的值作为结果的index
# closed 参数设置left以左闭右开方式运算
ts.resample("10D",
            label="left",
            closed="left").mean()

Pandas之九时序数据

1.2 使用自定义的函数

与上一步骤做相同运算,区别是使用apply的方法,此方法即可使用自定义的函数。

ts.resample("10D").apply(np.mean)

Pandas之九时序数据

2. 时区设置

默认生成的时间不带时区,可以使用tz_localize设置其本地时区,然后也可以使用tz_convert对其进行时区转换,以满足国际业务。

2.1 设置时区

将样本数据的时区设置为UTC

ts_utc = ts.tz_localize("UTC")
ts_utc

Pandas之九时序数据

2.2 时区转换

可以对设置过时区的数据,进行时区转换。将上一步骤的结果数据的时区转为上海。

Pandas之九时序数据

3. 周期转换

可以将某个时点的数据,用to_period方法转换为某个期间。此方法可以知道其所在月份、星期等。

3.1 转为星期周期

# index转为其所在的星期(PeriodIndex)
ps = ts.to_period("W")
ps

Pandas之九时序数据

3.2 转为时点

# 以周期结束时间作为结果的index
ps.to_timestamp(how="end")

Pandas之九时序数据

上一篇:Pandas之八Reshaping(二)


下一篇:Pandas之十数据分类