在熊猫中重新采样时间序列
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')
【讨论】:
我试图删除无用的部分,但我做不到。随着你的回答工作!非常感谢您的宝贵时间。以上是关于在熊猫中重新采样时间序列的主要内容,如果未能解决你的问题,请参考以下文章