Python 浮动日期转换
我正在使用Pandas和Matplotlib创建两个相同的日期范围。将numpy.float64转换为Pandas时间戳后,我有1分钟的差异-为什么Python 浮动日期转换,python,datetime,numpy,matplotlib,pandas,Python,Datetime,Numpy,Matplotlib,Pandas,我正在使用Pandas和Matplotlib创建两个相同的日期范围。将numpy.float64转换为Pandas时间戳后,我有1分钟的差异-为什么 import pandas as pd import matplotlib.dates as mdates import datetime as dt dstart = dt.date(2013,12,5) dend = dt.date(2013,12,10) d1 = pd.date_range(dstart, dend, freq='H')
import pandas as pd
import matplotlib.dates as mdates
import datetime as dt
dstart = dt.date(2013,12,5)
dend = dt.date(2013,12,10)
d1 = pd.date_range(dstart, dend, freq='H')
d2 = mdates.drange(dstart, dend, dt.timedelta(hours=1))
print d1[2]
print pd.Timestamp(mdates.num2date(d2[2]))
并得到结果:
2013-12-05 02:00:00
2013-12-05 02:01:00.504201+00:00
请注意,两个范围的长度也不相同:
>>> len(d1)
121
>>> len(d2)
120
我认为这可能被认为是mdates.drange
中的一个错误,但是引入错误是因为您使用日期
作为输入,而没有日期时间
(这也是文档字符串所说的)。至少,我认为,mdates.drange
可以检查这一点。使用
datetimes
时,如预期:
In [50]: dstart = dt.datetime(2013,12,5)
In [51]: dend = dt.datetime(2013,12,10)
In [52]: d1 = pd.date_range(dstart, dend, freq='H')
In [53]: d2 = mdates.drange(dstart, dend, dt.timedelta(hours=1))
In [54]: print d1[2]
2013-12-05 02:00:00
In [55]: print pd.Timestamp(mdates.num2date(d2[2]))
2013-12-05 02:00:00+00:00
请注意,长度仍然不同,因为mdates.drange
生成一个半开区间(因此dend
不包括在内),而pd.date\u range
生成一个闭合区间
对此失败原因的技术解释是,由于
日期
(),在mdates.drange
中计算范围的结束值出错。在您的情况下,最终值以小时为单位,但使用日期会忽略小时,并创建错误的间隔。谢谢!但是有没有任何理由说明dt.date(2013,12,5)不等于dt.datetime(2013,12,5)。第一个是date
对象,第二个是datetime
对象。和date
对象没有关于小时、分钟等的信息。