首页 > 解决方案 > 如何将日期时间转换为数字数据类型?

问题描述

我有一个数据集

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形成绘图?

标签: pythonpandasdatetimenumeric

解决方案


您收到以下错误:

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

您的错误消息告诉您matplotlib.pyplot.dates( plt.dates) 不存在。(错误表明有一个模块,您正在调用“日期”,但它不存在)。

因此,您需要先修复该错误,然后再担心转换任何内容。你的意思是改为打电话matplotlib.dates.date2num吗?在您的代码中,您具有以下内容:

将 matplotlib.dates 导入为 mdate

所以也许你是打算打电话mdate.date2num来的?那应该消除AttributeError.

如果这对您不起作用,您可以尝试使用其他评论者之一提供的链接to_pydatetime中的建议来使用 pandas 。我不熟悉它,但在这个示例页面中,它是作为 Series.dt.to_pydatetime() 访问的

所有这些转换都是必要的,因为您正在尝试使用df.plot; 也许你应该考虑直接调用 matplotlib 。例如,您可以直接使用plt.plot_date吗?(这里是它的链接)。Pandas 非常出色,但绘图界面不如其他界面成熟。举个例子(我并不是说这是您遇到的确切问题),但这pandas 中关于绘制日期的一个已知错误。是一个较旧的堆栈溢出线程,其中有人为您存根 plt.plot_date 方法。


推荐阅读