【问题标题】:Converting DateTime stamps into unix with Python使用 Python 将 DateTime 标记转换为 unix
【发布时间】:2016-09-04 04:10:55
【问题描述】:

我似乎无法将时间戳转换为 unix 时间戳格式,并假设我遗漏了一些要点。寻求帮助。

我在 df 中有一个列,它是一个日期时间对象,格式如下: YYYY-MM-DD HH:MM:SS 我需要一个带有 unix 标记的新列。

我将 csv 带入 python:

gps = filepath here   
dateparse= lambda x: pd.datetime.strptime(x, '%Y%m%d %H:%M:%S')
gps_dat = pd.read_csv(gps, parse_dates=['date_stamp'],date_parser=dateparse)

每当我尝试将此列更改为 unix 标记时,我都会收到有关错误格式或“datetime.datetime”没有属性“datetime”的错误:

gps_dat['unix']=datetime.datetime(gps_dat['date_stamp'])

我应该使用

calendar.timegm(tuple)

我还在学习,所以任何帮助将不胜感激!

【问题讨论】:

  • 您可能导入了datetime.datetime 而不仅仅是datetime,所以当您调用datetime.datetime 时,您实际上是在调用datetime.datetime.datetime,它没有定义。抱歉听起来有点像 Xzibit,但是... :)
  • 我认为这绝对解决了部分问题,谢谢!当我使用: gps_dat['unix']=datetime.datetime(gps_dat['date_stamp']) 现在我收到错误“无法将系列转换为
  • gps_dat['date_stamp'] 长什么样子?
  • gps_dat['date_stamp'] 是我的数据框中的一列:2015-04-16 15:23:20
  • 我的意思是,它已经是一个datetime 对象,还是一个字符串?如果它已经是datetime 对象,则只需使用gps_dat['unix'] = gps_dat['date_stamp']。如果是字符串,请使用gps_dat['unix'] = datetime.strptime(gps_dat['date_stamp'], '%Y-%m-%d %H:%M:%S')

标签: python pandas timestamp unix-timestamp


【解决方案1】:

您可以通过list理解使用更快的解决方案:

print gps_dat
  nam  code date1          date_stamp
0   a     1   1/1 2012-10-08 18:15:05
1   b     3   3/4 2012-10-08 18:15:05

gps_dat['unix'] = [t.value // 10 ** 9 for t in gps_dat['date_stamp']]
print gps_dat
  nam  code date1          date_stamp        unix
0   a     1   1/1 2012-10-08 18:15:05  1349720105
1   b     3   3/4 2012-10-08 18:15:05  1349720105

时间安排

In [46]: %timeit gps_dat['date_stamp'].astype(np.int64) // 10**9
1000 loops, best of 3: 204 µs per loop

In [47]: %timeit [t.value // 10 ** 9 for t in gps_dat['date_stamp']]
The slowest run took 4.99 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 24.2 µs per loop

【讨论】:

    【解决方案2】:

    更新:如果您想将日期时间列转换为 UNIX时间戳:

    gps_dat['unix']=gps_dat['date_stamp'].astype(np.int64) // 10**9
    

    注意:但必须是datetime 类型,不是字符串/对象

    旧答案:解析 UNIX时间戳到日期时间

    尝试像这样改变你的解析器函数:

    dateparse= lambda x: pd.to_datetime(x, unit='s')
    

    这将指示 to_datetime() 您正在使用 UNIX 时间戳格式

    【讨论】:

    • 当我用这个函数解析时,我仍然得到:2015-04-21 23:32:25 格式。
    • 成功了!!感谢大家的意见。非常感谢。
    【解决方案3】:

    编辑:我从未使用过 Pandas,但看起来这是你应该调用的那种函数:

    gps_dat['unix'] = gps_dat.apply(lambda row: time.mktime(row['date_stamp'].timetuple()), axis=col_number)
    

    其中col_numberdate_stamp 列的索引(假设它被正确解析为datetime)。

    原始答案(当我不知道 Pandas 参与其中时):

    替换那个

    gps_dat['unix']=datetime.datetime(gps_dat['date_stamp'])
    

    符合

    gps_dat['unix'] = time.mktime(gps_dat['date_stamp'].timetuple())
    

    并添加

    import time
    

    到您的进口。请注意some considerations apply to time zones,因此根据您的要求,您可能需要添加一些逻辑,例如转换为 UTC。

    【讨论】:

    • 我得到:“'系列对象没有属性'timetuple'”
    • 好的,这是pandas.Series,而不是datetime。我添加了一个pandas 标签,以便熟悉该库的人可以提供帮助。您可能想通过打印来检查 gps_dat['date_stamp'].data 包含的内容
    • 使用这个我得到一个“unhashable type:list”错误。顺便说一句,感谢您的所有帮助。
    猜你喜欢
    • 2013-11-17
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2011-03-28
    相关资源
    最近更新 更多