在熊猫中重新采样时间序列

Posted

技术标签:

【中文标题】在熊猫中重新采样时间序列【英文标题】:Resample Time Series in pandas 【发布时间】:2021-03-11 02:14:39 【问题描述】:

我有一个包含多个及时记录的数据框,特别是每 4 分钟一次。我想绘制时间序列以获得该温度的每日多个值。然而,数据以单一方式而不是每天绘制每个值,如我所愿。

df = pd.read_csv("my_file.csv")
print (df.head())

输出

                       Temperature
Date/Time
2015-07-01 00:00:47        25.21
2015-07-01 00:01:48        25.23
2015-07-01 00:02:48        25.33
2015-07-01 00:03:47        25.22
2015-07-01 00:04:48        25.32

当我使用 seaborn 进行绘图时,我得到了这个:

df = df.reset_index()
sns.relplot(x= "Date/Time", y="Temperature", data=df, kind="line")
plt.show()

这不是我想要绘制的;我想要这样的例子:

我认为我必须重新采样数据,但我得到了当天的平均值。因此,一天只有一个值,而不是多个值。

df = df.resample("H").mean()
print (df.head())

输出:

                      Temperature
Date/Time
2015-07-01 00:00:00    25.264167
2015-07-01 01:00:00    25.267167
2015-07-01 02:00:00    25.272000
2015-07-01 03:00:00    25.290167
2015-07-01 04:00:00    25.307333

不是我需要的。你能帮帮我吗?

【问题讨论】:

你可以在这里找到不同的时间序列频率字符串别名(pandas.pydata.org/pandas-docs/stable/user_guide/…),你也可以使用df.resample("2H").mean()每两小时重新采样一次等 感谢您的回答。那是行不通的。我什至写了一个这样做的例子。该方法只是将数据重新采样为两个小时的平均值。要绘制这样的数字,您需要在同一天有多个值。这意味着您不必将所有内容平均为一个值,在这种情况下,每 2 小时一个值。 如果您想重新采样一天,请使用df.resample("D").mean() 感谢您的回答。这正是我在帖子中所写的。可能你没有理解这个问题。这个想法是将所有信息收集到具有多个值的一天中,而不是一个值。因此,这个命题正是我所做的并且是不正确的。它更复杂。感谢您的帮助。 【参考方案1】:

必须有更好的方法来对时间戳进行分类,但我现在正在画一个空白。

这是一种方法:创建一个新列,在其中删除部分日期/时间信息,以便该时间范围内的所有行共享相同的值。

例如,如果您想按小时分类:

df['Binned time'] = pd.to_datetime(df.index.strftime('%Y-%m-%d %H:00:00'))

或按天数:

df['Binned time'] = pd.to_datetime(df.index.strftime('%Y-%m-%d 00:00:00'))

然后使用线图:

sns.lineplot(data=df, x='Binned time', y='data')

【讨论】:

我试图删除无用的部分,但我做不到。随着你的回答工作!非常感谢您的宝贵时间。

以上是关于在熊猫中重新采样时间序列的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框中重新采样 Hz

重新采样熊猫数据框并用零填充新行

熊猫时间序列重新采样,分箱似乎关闭

熊猫将每小时时间序列重新采样为每小时比例时间序列

熊猫数据框每天重新采样,没有日期时间索引

熊猫数据框每天重新采样,没有日期时间索引