Как извлечь часы: минуты из метки даты и времени в Python - PullRequest
1 голос
/ 11 марта 2019

У меня есть датафрейм, как указано ниже: 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'])

Результат:

Hourly data of all days

Однако в 08:30, 09:30, ... и т. Д. Имеются данные, но они не отражаются на графике. Фактически, эти промежуточные данные за час объединяются с данными за 08, 09 час и т. Д. Итак, мой вопрос, как показать данные 08.30, 09.30, ... и т. Д. На графике? (Похоже, мне нужно извлечь и час и минуту из одного и того же времени)

Мой принятый ниже ответ дает следующий сюжет, и это то, что я хотел. Но, тики оси X сбиты вместе. Они не появляются, как в моем первом сюжете выше. Как исправить тики оси X на моем втором графике ?: '

enter image description here

1 Ответ

2 голосов
/ 11 марта 2019
#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)) => Создать фиктивную ось x для matplotlib
  • plt.plot(x, df['POA']) => Сделать сюжет
  • plt.xticks(x, labels) => Заменить метки x на дату и время

Предположение: индекс даты и времени сортируется, если нет, то график будет испорчен. Если индекс не в порядке сортировки, то сортируйте его перед построением графика для получения правильных результатов.

Мы можем дополнительно расширить ось x, включив в нее секунды, даты и т. Д., Используя соответствующий формататор строк в df.index.strftime

Решение с пропуском 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)
...