我正在尝试使用下面的代码将pandas datetime转换为epoch。
import time
import pandas as pd
compare_date = pd.datetime.today()+pd.DateOffset(days=-60)
print time.mktime(datetime.datetime.strptime(compare_date, "%Y-%m-%d").timetuple())
它正在抛出错误
'unicode' object has no attribute 'mktime'
我也试过这段代码
t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
secs = time.mktime( t )
print secs
而且,它仍然会抛出相同的错误。我使用的是Python 2.7.5版。我在这里缺少什么?
答案 0 :(得分:2)
您已经以某种方式将time
设置为代码中的unicode
对象,您也无法将Timestamp
传递给strptime
它必须是字符串< /强>
In [15]: time = u"foo"
In [16]: time.mktime
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-16-b93f36374edc> in <module>()
----> 1 time.mktime
AttributeError: 'unicode' object has no attribute 'mktime'
您需要查看代码并查看您对time
的引用的位置,time = some_unicode_object
不完全确定你想要的结果,但在TimeStamp对象上使用strftime会更接近:
print time.mktime(datetime.datetime.strptime(compare_date.strftime("%Y-%m-%d"), "%Y-%m-%d").timetuple())
1422748800.0
答案 1 :(得分:1)
这不是对错误的解释(参见Padraic Cunningham的回答),而是实现最终目标的更短途径。
您似乎正在将compare_date
转换为时间元组。这是在熊猫中直接做到这一点的方法:
import pandas as pd
compare_date = pd.datetime.today()+pd.DateOffset(days=-60)
print compare_date.timetuple()
导致:
time.struct_time(tm_year=2015, tm_mon=2, tm_mday=1, tm_hour=1,
tm_min=20, tm_sec=43, tm_wday=6, tm_yday=32, tm_isdst=-1)
答案 2 :(得分:0)
请参阅@ Padraic Cunningham's answer中对mktime()
错误的解释。
pandas.datetime
是datetime.datetime
。你应该直接使用它:
from datetime import datetime, timedelta
compare_date = datetime.utcnow() - timedelta(60)
posix_timestamp = (compare_date - datetime(1970, 1, 1)).total_seconds()
请参阅Converting datetime.date to UTC timestamp in Python
如果compare_date
不在UTC中,那么您应该首先将其转换为UTC。请参阅Find if 24 hrs have passed between datetimes - Python - 注意:mktime()
可能会失败!
要更直接地获取时间戳(纪元时间),您可以使用time.time()
:
import time
timestamp = time.time() - 60 * 86400 # 60 days ago
两种解决方案都忽略闰秒(除非在第二次使用“正确”时区)。