首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError:“numpy.datetime64”对象没有“no序号”属性

AttributeError:“numpy.datetime64”对象没有“no序号”属性
EN

Stack Overflow用户
提问于 2018-06-29 11:58:40
回答 2查看 3K关注 0票数 2

我想画一个时间线

代码语言:javascript
复制
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))

但是得到了错误:

代码语言:javascript
复制
AttributeError: 'numpy.datetime64' object has no attribute 'toordinal'

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

代码语言:javascript
复制
df.A.dtype 
dtype('<M8[ns]')

我尝试了一些推荐的解决方案(转换器和潘达克诺夫),但我仍然无法让它发挥作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-19 11:31:59

如果您的目标是使用AB列作为x轴和C列作为y轴绘制水平线,则可以直接使用数据数组。将1日添加到B列中,因为时间的变化非常小,可以在图中观察到这一点:

代码语言:javascript
复制
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()

输出地块:

票数 3
EN

Stack Overflow用户

发布于 2018-12-25 18:03:35

我没有发现数据类型有任何问题。这个问题可能是B列中的日期。作为@San深层Kadapa的另一种选择,您可以将最大日期设置为xmax。例如:

代码语言:javascript
复制
 ax = plt.subplot()
ax.hlines(df.C.values, df.A.values, xmax='2017-01-02')
plt.show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51101252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档