AttributeError:"numpy.datetime64"对象没有属性"toordinal" [英] AttributeError: 'numpy.datetime64' object has no attribute 'toordinal'

查看:1604
本文介绍了AttributeError:"numpy.datetime64"对象没有属性"toordinal"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试绘制时间线

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'

我认为这是由数据类型引起的:

I think it's caused by the data type:

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

我尝试了一些推荐的解决方案(转换器和pandacnv),但仍然无法正常工作.

I tried some recommended solutions (converter & pandacnv) but I still couldn't get it to work.

推荐答案

如果您的目标是使用AB列作为x轴并使用C列作为y轴来绘制水平线,则您可以直接使用dataframe数组.在B列中添加了1天,因为时间变化很小,可以在图形中观察到这一点:

If your aim is to plot horizontal lines using the A and B columns as x-axis and C column as y-axis, you can directly use arrays of dataframe. Added 1 day to B column since the time changes very minimal to observe that in graph:

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()

输出图:

这篇关于AttributeError:"numpy.datetime64"对象没有属性"toordinal"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆