AttributeError: у объекта 'numpy.datetime64' нет атрибута 'toordinal' - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь нарисовать график

import datetime          as da
import matplotlib.dates  as dt

# Data
df = pd.DataFrame({'A': [da.datetime(2017,1,5,9,8),   da.datetime(2017,1,5,9,9),  da.datetime(2017,1,7,9,19), da.datetime(2017,1,7,9,19),  da.datetime(2017,1,7,9,19), da.datetime(2017,2,7,9,19), da.datetime(2017,2,7,9,19)],
                   'B': [da.datetime(2017,1,5,9,9),   da.datetime(2017,1,5,9,12), da.datetime(2017,1,7,9,26), da.datetime(2017,1,7,9,20),  da.datetime(2017,1,7,9,21), da.datetime(2017,2,7,9,23), da.datetime(2017,2,7,9,25)],
                   'C' :[1,                           2,                          3,                          4,                           5,                          6,                          7 ]})

# Visualisation
ax = plt.subplot()
ax = plt.hlines(df.C,
    dt.date2num(df.A),
    dt.date2num(df.B))

но получаю ошибку:

AttributeError: 'numpy.datetime64' object has no attribute 'toordinal'

Я думаю, что это связано с типом данных:

df.A.dtype 
dtype('<M8[ns]')

Я попробовал некоторые рекомендуемые решения (converter & pandacnv), но все равно не смог заставить его работать.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Я не видел никаких проблем с типом данных. Проблемой может быть дата в столбце B. В качестве альтернативы @Sandeep Kadapa, вы можете просто установить максимальную дату как xmax. Например:

 ax = plt.subplot()
ax.hlines(df.C.values, df.A.values, xmax='2017-01-02')
plt.show()
0 голосов
/ 19 декабря 2018

Если ваша цель - построить горизонтальные линии, используя столбцы A и B в качестве оси X и столбец C в качестве оси Y, вы можете напрямую использовать массивы данных. В столбец B добавлен 1 день, так как время меняется очень минимально, чтобы увидеть это на графике:

df['B'] = df['B']+pd.Timedelta("1D")
ax = plt.subplot()
ax.hlines(df.C.values, df.A.values, df.B.values, lw=2)
plt.show()

Выходной участок:

enter image description here

...