python - 属性错误: 'numpy.datetime64' object has no attribute 'toordinal'

标签 python pandas numpy matplotlib timeline

我正在尝试绘制时间线

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]')

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

最佳答案

如果您的目标是使用 AB 列作为 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

关于python - 属性错误: 'numpy.datetime64' object has no attribute 'toordinal' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51101252/

相关文章:

python - 查找两个值之间的唯一数据

python - 如何在 Jupyter Notebook 中创建模块并导入它们? Python

Python 打开文件语句正在从空文件中读取行

python - 将结果写入 Excel

python - timedelta 操作的错误结果

python找到两个numpy数组的交点

python - Numpy 库无法在 Pycharm 中解析

python - 名称分隔符 `:` 的含义

python - 将站点部署到 Azure 时出现 "OperationalError: database is locked"

python - Pandas :计算数据框中的唯一值