如何将日期时间转换为数字数据类型?

时间:2018-07-16 07:47:50

标签: python pandas datetime numeric

我有一个数据集

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,以便形成图?

2 个答案:

答案 0 :(得分:1)

您遇到以下错误:

  

AttributeError:“模块”对象没有属性“日期”

您的错误消息告诉您matplotlib.pyplot.datesplt.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)中传递日期。我认为这可能是您所寻找的最接近的东西。