python - 如何从 Python 中的日期时间戳中提取小时:分钟
问题描述
我有如下给出的数据框:df=
POA ... Inverter efficiency
2019-01-25 08:00:00 20.608713 ... 0.708626
2019-01-29 08:00:00 200.250137 ... 0.017787
2019-01-29 08:30:00 347.699615 ... 0.000000
2019-01-29 09:00:00 492.822662 ... 0.000000
2019-01-29 09:30:00 620.336243 ...
.
.
2019-03-07 13:00:00 1151.468384 ... 1.067493
2019-03-07 13:30:00 1119.876831 ... 2.311577
2019-03-07 14:00:00 1038.760864 ... 3.395081
我想为所有天绘制 24 小时图。我的代码
plot(df.index.hour,df['POA'])
结果是:
但是,在08:30、09:30、...等时有数据。但它没有反映在情节中。实际上,这些中间小时数据点是与 08、09hr 等数据结合在一起的。所以,我的问题是,如何在绘图上同时显示 08.30、09.30、...等数据?(看起来我必须从同一日期时间提取小时和分钟)
我接受的以下答案给出了以下情节,这就是我想要的。但是,x 轴刻度是结合在一起的。它们不像我上面的第一个情节那样出现。如何在我的第二个图中更正 x 轴刻度?:'
解决方案
#rng = pd.date_range('1/5/2018 00:00', periods=5, freq='35T')
#df = pd.DataFrame({'POA':randint(1, 10, 5)}, index=rng)
labels = df.index.strftime('%H:%M')
x = np.arange(len(labels))
plt.plot(x, df['POA'])
plt.xticks(x, labels)
脚步:
labels = df.index.strftime('%H:%M')
=> 将日期时间转换为“小时:分钟”格式以用作 x 标签x = np.arange(len(labels))
=> 为 matplotlib 创建一个虚拟 x 轴plt.plot(x, df['POA'])
=> 制作情节plt.xticks(x, labels)
=> 用日期时间替换 x 标签
假设:日期时间索引已排序,否则图表将被弄乱。如果索引未按排序顺序,则在绘制正确结果之前对其进行排序。
我们可以通过在 df.index.strftime 中使用适当的字符串格式化程序来进一步增强 x 轴以包含秒、日期等
跳过 x-ticks 的解决方案以避免出现棒状 x 标签
#rng = pd.date_range('1/5/2018 00:00', periods=50, freq='35T')
#df = pd.DataFrame({'POA':randint(1, 10, 50)}, index=rng)
labels = df.index.strftime('%H:%M')
x = np.arange(len(labels))
fig, ax = plt.subplots()
plt.plot(x, df['POA'])
plt.xticks(x, labels)
skip_every_n = 10
for i, x_label in enumerate(ax.xaxis.get_ticklabels()):
if i % skip_every_n != 0:
x_label.set_visible(False)
推荐阅读
- angular - clrDgSingleSelected 在清晰版本 3 中抛出错误
- macos - 如何调试调用 NSMenuItem 上的 undo 命令导致的崩溃?
- sas - SAS:在数据步中添加字符变量而不预先设置长度
- node.js - NodeJS/Express 多个路由文件之间的共享功能
- node.js - heroku Postgres - 续集:主机没有 pg_hba.conf 条目
- c# - 已发布的文件夹名称和清单未更新
- java - 空集合转换为空
- r - 字符串似乎是一个空格字符,但不是
- mysql - 有没有办法将查询结果临时存储在 mySQL 中?
- sql - SQL Server 创建根据不同日期范围合计数量的查询