Почему на моем графике появляются пересекающиеся линии, когда я конвертирую индекс из строки в дату и время?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему на моем графике появляются пересекающиеся линии, когда я конвертирую индекс из строки в дату и время?

Сообщение Anonymous »

Я пытаюсь построить временной ряд с помощью plt.plot(), но постоянно наблюдаю какие-то странные результаты. Образец набора данных, который я предоставляю ниже (весь набор данных содержит около 150 000 записей). Один из столбцов этого набора данных состоит из значений времени и служит индексом. В зависимости от того, преобразую ли я индекс из строки в объект datetime или нет, при построении графика относительно целевой переменной я получаю два разных результата.
Сценарий 1: индекс строки

Код: Выделить всё

import matplotlib.pyplot as plt
import pandas as pd

sample_df = pd.DataFrame()
sample_df["Date"] = [ "2002-12-31 01:00:00", "2002-06-06 10:00:00", "2003-11-10 19:00:00",
"2003-04-15 04:00:00", "2004-09-19 14:00:00", "2004-02-24 23:00:00",
"2005-07-30 08:00:00", "2005-01-03 17:00:00", "2006-06-08 02:00:00",
"2007-11-12 11:00:00", "2007-04-18 20:00:00", "2008-09-21 06:00:00",
"2008-02-26 15:00:00", "2009-08-03 00:00:00", "2009-01-05 09:00:00",
"2010-06-11 19:00:00", "2011-11-14 04:00:00", "2011-04-20 13:00:00",
"2012-09-24 23:00:00", "2012-02-28 08:00:00", "2013-08-04 17:00:00",
"2013-01-07 02:00:00", "2014-06-13 09:00:00", "2015-11-17 18:00:00",
"2015-04-22 01:00:00", "2016-09-26 09:00:00", "2016-03-02 18:00:00",
"2017-08-06 01:00:00", "2017-01-10 10:00:00", "2018-01-16 19:00:00" ]
sample_df["Energy_MW"] = [ 26498.0, 39167.0, 36614.0, 21837.0, 26644.0,
33574.0, 30255.0, 33781.0, 24344.0, 34708.0,
33996.0, 21127.0, 36255.0, 31982.0, 35448.0,
37066.0, 22116.0, 31326.0, 26569.0, 33565.0,
34649.0, 25709.0, 33516.0, 33032.0, 22333.0,
28064.0, 33905.0, 25304.0, 41505.0, 39543.0 ]
sample_df = sample_df.set_index("Date")

# Basic plot.
fig = plt.figure( figsize = (10,5) )
plt.plot(sample_df.index, sample_df["Energy_MW"], 'b')
plt.grid(True)
plt.show()
Это график, соответствующий индексу строки:
[img]https:/ /i.sstatic.net/yNAsYK0w.png[/img]

Сценарий 2:[/b] индекс datetime

Код: Выделить всё

import matplotlib.pyplot as plt
import pandas as pd

sample_df = pd.DataFrame()
sample_df["Date"] = [ "2002-12-31 01:00:00", "2002-06-06 10:00:00", "2003-11-10 19:00:00",
"2003-04-15 04:00:00", "2004-09-19 14:00:00", "2004-02-24 23:00:00",
"2005-07-30 08:00:00", "2005-01-03 17:00:00", "2006-06-08 02:00:00",
"2007-11-12 11:00:00", "2007-04-18 20:00:00", "2008-09-21 06:00:00",
"2008-02-26 15:00:00", "2009-08-03 00:00:00", "2009-01-05 09:00:00",
"2010-06-11 19:00:00", "2011-11-14 04:00:00", "2011-04-20 13:00:00",
"2012-09-24 23:00:00", "2012-02-28 08:00:00", "2013-08-04 17:00:00",
"2013-01-07 02:00:00", "2014-06-13 09:00:00", "2015-11-17 18:00:00",
"2015-04-22 01:00:00", "2016-09-26 09:00:00", "2016-03-02 18:00:00",
"2017-08-06 01:00:00", "2017-01-10 10:00:00", "2018-01-16 19:00:00"  ]
sample_df["Energy_MW"] = [ 26498.0, 39167.0, 36614.0, 21837.0, 26644.0,
33574.0, 30255.0, 33781.0, 24344.0, 34708.0,
33996.0, 21127.0, 36255.0, 31982.0, 35448.0,
37066.0, 22116.0, 31326.0, 26569.0, 33565.0,
34649.0, 25709.0, 33516.0, 33032.0, 22333.0,
28064.0, 33905.0, 25304.0, 41505.0, 39543.0 ]
sample_df = sample_df.set_index("Date")
sample_df.index = pd.to_datetime(sample_df.index)

# Basic plot.
fig = plt.figure( figsize = (10,5) )
plt.plot(sample_df.index, sample_df["Energy_MW"], 'b')
plt.grid(True)
plt.show()
А это график, соответствующий индексу даты и времени:
[img]https: //i.sstatic.net/poyLjsfg.png[/img]

Почему преобразование в объект datetime резко ухудшает результаты? Как решить проблему? Пожалуйста, объясните простыми словами. Я попытался получить графические результаты в обоих сценариях, чтобы определить источник проблемы. Мне бы хотелось увидеть некоторые идеи о том, как получить правильный график, когда индекс также имеет правильный тип данных (datetime). Я также наткнулся на видео на YouTube, охватывающее тот же набор данных и тот же временной ряд. В видео я не увидел неправильного графика, несмотря на то, что индекс кадра данных был преобразован в правильный тип данных.

Подробнее здесь: https://stackoverflow.com/questions/793 ... rom-string
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»