AttributeError: 'numpy.datetime64' object has no attribute 'toordinal'
AttributeError: 'numpy.datetime64' object has no attribute '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'
我认为是数据类型造成的:
df.A.dtype
dtype('<M8[ns]')
我尝试了一些推荐的解决方案(converter & pandacnv),但仍然无法正常工作。
如果您的目标是使用 A
和 B
列作为 x 轴和 C
列作为 y 轴绘制水平线,您可以直接使用数据框数组.将 1
天添加到 B
列,因为时间变化非常小以观察图表:
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()
输出图:
我没有发现数据类型有任何问题。
问题可能是 B 列中的日期。作为@Sandeep Kadapa 的替代方案,您可以将最大日期设置为 xmax。例如:
ax = plt.subplot()
ax.hlines(df.C.values, df.A.values, xmax='2017-01-02')
plt.show()
我在画时间线
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),但仍然无法正常工作。
如果您的目标是使用 A
和 B
列作为 x 轴和 C
列作为 y 轴绘制水平线,您可以直接使用数据框数组.将 1
天添加到 B
列,因为时间变化非常小以观察图表:
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()
输出图:
我没有发现数据类型有任何问题。 问题可能是 B 列中的日期。作为@Sandeep Kadapa 的替代方案,您可以将最大日期设置为 xmax。例如:
ax = plt.subplot()
ax.hlines(df.C.values, df.A.values, xmax='2017-01-02')
plt.show()