如何从 Python 中的日期时间戳中提取 hour:minute
How to extract hour:minute from a datetime stamp in 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、...等处有一个数据,但是在plot中没有体现出来。实际上,这些中间小时数据点是结合了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')
=> 将日期时间转换为 "Hours:minutes" 格式以用作 x 标签
x = np.arange(len(labels))
=> 为 matplotlib 创建虚拟 x 轴
plt.plot(x, df['POA'])
=> 制作情节
plt.xticks(x, labels)
=> 将 x 标签替换为日期时间
假设:日期时间索引已排序,否则图表将乱七八糟。如果索引未按排序顺序排列,则在绘制正确结果之前对其进行排序。
我们可以通过在 df.index.strftime
中使用适当的字符串格式化程序来进一步增强 x 轴以包括秒、日期等
解决方案跳过 x-ticks 以避免 clubbed 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)
我有如下所示的数据框: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、...等处有一个数据,但是在plot中没有体现出来。实际上,这些中间小时数据点是结合了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')
=> 将日期时间转换为 "Hours:minutes" 格式以用作 x 标签x = np.arange(len(labels))
=> 为 matplotlib 创建虚拟 x 轴
plt.plot(x, df['POA'])
=> 制作情节plt.xticks(x, labels)
=> 将 x 标签替换为日期时间
假设:日期时间索引已排序,否则图表将乱七八糟。如果索引未按排序顺序排列,则在绘制正确结果之前对其进行排序。
我们可以通过在 df.index.strftime
中使用适当的字符串格式化程序来进一步增强 x 轴以包括秒、日期等解决方案跳过 x-ticks 以避免 clubbed 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)