我有一个数据集
time MachineId
1530677359000000000 01081081
1530677363000000000 01081081
1530681023000000000 01081090
1530681053000000000 01081090
1530681531000000000 01081090
所以我的代码如下:
import pandas as pd
from datetime import datetime
import time
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
df= pd.read_csv('acn.csv')`
df['time']=pd.to_datetime(df['time'], unit='ns')` #converting the epoch nanosec time to datetime-format
print(df.head())
输出:
time MachineId
0 2018-07-04 04:09:19 1081081.0
1 2018-07-04 04:09:23 1081081.0
2 2018-07-04 05:10:23 1081090.0
3 2018-07-04 05:10:53 1081090.0
4 2018-07-04 05:18:51 1081090.0
现在我想将时间数据更改为数字,以生成时间和机器ID之间的图
dates = plt.dates.date2num(df['time'])
df.plot(kind='scatter',x='dates',y='MachineId')
plt.show()
这将引发错误:
AttributeError:“模块”对象没有属性“日期”
如何将datetime
的格式更改为numeric
,以便形成图?
答案 0 :(得分:1)
您遇到以下错误:
AttributeError:“模块”对象没有属性“日期”
您的错误消息告诉您matplotlib.pyplot.dates
(plt.dates
)不存在。 (该错误表明您正在调用一个名为“日期”的模块,但该模块不存在)。
因此,在担心转换任何内容之前,您需要修复该错误。您是要打{{1}}吗?在您的代码中,您具有以下内容:
将matplotlib.dates导入为mdate
所以也许您打算打matplotlib.dates.date2num
吗?那应该消除mdate.date2num
。
如果这对您不起作用,您可以尝试使用其他评论者之一提供的link中的建议,以使用熊猫AttributeError
。我不熟悉它,但是在此example page中,它作为Series.dt.to_pydatetime()
所有这些转换只是必要的,因为您正尝试使用to_pydatetime
;也许您应该考虑直接调用matplotlib。例如,您可以只使用df.plot
吗? (here's的链接)。 Pandas非常出色,但是绘图界面还不如其余部分成熟。举个例子(我并不是说这是您遇到的确切问题),而是here is一个关于绘制日期的熊猫已知错误。 Here是一个较旧的堆栈溢出线程,有人在其中为您存根plt.plot_date方法。
答案 1 :(得分:0)
您也可以直接绘制日期。例如,如果要在x轴上显示日期,则可以在ax.plot(df.time, ids)
中传递日期。我认为这可能是您所寻找的最接近的东西。