python - 在熊猫中重新采样时间序列
问题描述
我有一个包含多个及时记录的数据框——特别是每 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
解决方案
必须有更好的方法来对时间戳进行分类,但我现在正在画一个空白。
这是一种方法:创建一个新列,在其中删除部分日期/时间信息,以便该时间范围内的所有行共享相同的值。
例如,如果您想按小时分类:
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')
推荐阅读
- docker - Docker 组成独特的容器名称和主机名
- python - 有没有办法在 jupyter notebook 中首次执行后自动隐藏/自动折叠代码单元?
- javascript - NestJS Permissions Guard - 最有效的方式
- javascript - 在 Laravel 中转换没有确定日期的时区的日期和时间?
- javascript - 在输入字段中使用 value={} 时 setState 无法正常工作
- google-apps-script - TypeError:无法读取未定义的属性“范围”我该如何解决
- arrays - 嵌套循环中的数组拒绝接受父循环的索引具有数组的索引
- javascript - 在 django 中再次将数据传递给模态查询数据?
- javascript - javascript中的快速排序算法中的“超出最大调用堆栈大小”
- microservices - 是否需要验证非公开微服务的输入数据?