如何将日期时间转换为数字数据类型?
how to convert datetime to numeric data type?
我有一个数据集
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: 'module' object has no attribute 'dates'
如何将 datetime
格式更改为 numeric
以便形成绘图?
您也可以直接绘制日期。例如,如果您想在 x 轴上显示日期,您可以在 ax.plot(df.time, ids)
中传递日期。我认为这可能是最接近您要寻找的东西。
您遇到以下错误:
AttributeError: 'module' object has no attribute 'dates'
您的错误消息告诉您 matplotlib.pyplot.dates
(plt.dates
) 不存在。 (该错误表明有一个您正在调用的模块 'dates' 但它不存在)。
因此您需要在担心转换任何内容之前修复该错误。您是想改为调用 matplotlib.dates.date2num
吗?在您的代码中,您具有以下内容:
import matplotlib.dates as mdate
所以也许您打算改为调用 mdate.date2num
?那应该消除 AttributeError
.
如果这对您不起作用,您可以尝试 provided by one of the other commenters, to use pandas to_pydatetime
. I'm not familiar with it, but in this example page 中的建议,它的访问方式为 Series.dt.to_pydatetime()
所有这些转换都是必需的,因为您正在尝试使用 df.plot
;也许你应该考虑直接调用 matplotlib。例如,您可以只使用 plt.plot_date
吗? (here's the link to it). Pandas is excellent, but the plotting interface isn't as mature as the rest of it. As an example (I'm not saying this is the exact problem you are having) but here is a known bug in pandas regarding plotting dates. Here 是一个较旧的堆栈溢出线程,其中有人为您删除了一个 plt.plot_date 方法。
我有一个数据集
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: 'module' object has no attribute 'dates'
如何将 datetime
格式更改为 numeric
以便形成绘图?
您也可以直接绘制日期。例如,如果您想在 x 轴上显示日期,您可以在 ax.plot(df.time, ids)
中传递日期。我认为这可能是最接近您要寻找的东西。
您遇到以下错误:
AttributeError: 'module' object has no attribute 'dates'
您的错误消息告诉您 matplotlib.pyplot.dates
(plt.dates
) 不存在。 (该错误表明有一个您正在调用的模块 'dates' 但它不存在)。
因此您需要在担心转换任何内容之前修复该错误。您是想改为调用 matplotlib.dates.date2num
吗?在您的代码中,您具有以下内容:
import matplotlib.dates as mdate
所以也许您打算改为调用 mdate.date2num
?那应该消除 AttributeError
.
如果这对您不起作用,您可以尝试 to_pydatetime
. I'm not familiar with it, but in this example page 中的建议,它的访问方式为 Series.dt.to_pydatetime()
所有这些转换都是必需的,因为您正在尝试使用 df.plot
;也许你应该考虑直接调用 matplotlib。例如,您可以只使用 plt.plot_date
吗? (here's the link to it). Pandas is excellent, but the plotting interface isn't as mature as the rest of it. As an example (I'm not saying this is the exact problem you are having) but here is a known bug in pandas regarding plotting dates. Here 是一个较旧的堆栈溢出线程,其中有人为您删除了一个 plt.plot_date 方法。