当前位置: 首页 > 科技观察

时间序列数据组织的三个Pandas函数

时间:2023-03-17 21:03:14 科技观察

本文将演示处理时间序列数据的三个最常用的pandas操作。首先,我们需要导入所需的库:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt本文中使用的数据集非常简单。它只有1列,名为VPact(mbar),代表气候中的压力。这个数据集的索引是datetime类型的:我们也可以应用pd.to_datetime(df.index)来创建datetime类型的索引。localizationtimezonelocalization是什么意思?本地化意味着将给定时区更改为目标或所需时区。这样做不会更改数据集中的任何内容,只会在所选时区中显示日期和时间。为什么需要它?如果你的时间序列数据集是UTC格式,你的客户要求你按照美国时区等方式处理气候数据。在将它提供给模型之前,您需要更改它,因为如果您不这样做,模型将生成全部基于UTC的结果。如何修改只需要改变数据集的索引部分df.index=df.index.tz_localize("UTC")看下面的结果:数据集的索引部分发生了变化。日期和时间与以前相同,但现在最后显示+00:00。这意味着pandas现在将索引识别为UTC时区中的时间实例。现在我们可以专注于将UTC时区转换为我们想要的时区。df.index=df.index.tz_convert("Asia/Qatar")现在我们的时区已经更改为卡塔尔时区+03:00。时间窗口重采样在本节中,我们将研究如何根据时间间隔预测时间序列数据。这是什么意思?这意味着收集一系列感兴趣的值(在本例中为蒸气压读数)并以某种方式概括它们,以便我们可以大致了解数据集中的趋势。我们可以通过取平均值、最大值、最小值等来假设一个读数来概括组。这里我们将5个读数分组为一组,这就是我们所说的时间窗口。我们为什么需要它?我将用一个例子来解释这一点。假设客户的问题是:“我给你我的气候传感器读数,每10分钟获取一次,我希望你告诉我每天的蒸气压预报。也就是说,我想要未来每一天的预报。“现在你可能会说,这有什么大不了的?我们手头有一些读数,每10分钟读取一次,我们只需要预测每天的气压。在我们开始工作之前,让我们想象一下绘图仪:fig,ax=plt.subplots(figsize=(15,6))df['VPact(mbar)'].plot(ax=ax,xlabel='Time',ylabel='VPact(mbar)')如何重新采样现在我们对数据集重新采样并使其成为汇总数据的单行/记录。resampled_df=df["VPact(mbar)"].resample("1D")这可能看起来很奇怪,但它返回一个对象而不是DF。如果我们尝试运行resampled_df.head()它将抛出错误。这是因为虽然它已被重新采样为每行一天,但我们还没有告诉它应该如何聚合一天窗口中发生的所有读数。聚合操作包括:最大值、最小值、平均值、众数?在本文中,我们取平均值。resampled_df.mean()#OUTPUT:#DateTime#2010-01-0100:00:00+03:004.386905#2010-01-0200:00:00+03:003.954861#2010-01-0300:00:00+03:005.435417#2010-01-0400:00:00+03:005.129375#2010-01-0500:00:00+03:0010.372361#频率:D,名称:VPact(mbar),Length:365,dtype:float64我们还需要将其转换为df。resampled_df=resampled_df.mean().to_frame()从每分钟读数到每日读数的时间索引。我们再次可视化图,ax=plt.subplots(figsize=(15,6))resampled_df['VPact(mbar)'].plot(ax=ax,xlabel='Time',ylabel='VPact(mbar)')时间间隔小很多,显示每日数据以填补时间间隔。本节将介绍如何在数据中填充时间间隔。这是什么意思?时间序列数据由在连续时间段内生成的数据组成。如果数据集中有一些缺失的数据,它会在时间间隔中产生间隙,为什么需要它?如果您向模型提供有间隙的数据,模型将立即崩溃,这是我们不想看到的。让我们假设我们的数据集有一些空值序列。数据集如下所示:fig,ax=plt.subplots(figsize=(15,6))df_with_gap['VPact(mbar)'].plot(ax=ax,xlabel='Time',ylabel='VPact(mbar)')如何填补这个空白我们尝试了各种值来填补这个空白。但是没有一个是标准的,因为所有的填充值都只是对实际值的一般猜测。在这个例子中,我只展示了其中一种填充方法,其他方法类似。这里将使用前向填充方法。此方法遍历我的数据集并获取它在遇到空白之前读取的最后一个值,并用最后一个值填充整个空白。这种方法虽然简单,但在许多情况下都很有用。df_with_gap=df_with_gap['VPact(mbar)'].fillna(method="ffill")我们也将其转化为一个DF。df_with_gap=df_with_gap.to_frame()现在让我们看看数据集。应该看到完整的一行并且不包含空格。fig,ax=plt.subplots(figsize=(15,6))df_with_gap['VPact(mbar)'].plot(ax=ax,xlabel='Time',ylabel='VPact(mbar)')缺失数据它现在已经满了。综上所述,就是常用的三种时间数据处理操作,希望对大家有所帮助。本文源码https://www.kaggle.com/code/muhammadhammad02/wrangling-concepts-with-time-series-data