【问题标题】:Convert a column of yyyy-mm-dd datetimes to linux time epoch in Python在Python中将一列yyyy-mm-dd datetime转换为unix时间纪元
【发布时间】:2019-01-16 12:08:35
【问题描述】:

在 python 3.6.0 和 pandas 0.20.0 中

有一个日期列yyyy-mm-dd

date
2017-08-16
2017-08-17
2017-08-18

这里有同样的问题

Convert a column of datetimes to epoch in Python

但遗憾的是,帖子中的解决方案都不起作用

df['date']=df['date'].astype('int64')//1e9

ValueError: invalid literal for int() with base 10: '2017-08-16'


df['date']=(df['date'] - dt.datetime(1970,1,1)).dt.total_seconds()

NameError: name 'dt' is not defined

有什么想法吗?谢谢。

【问题讨论】:

  • 错误提示:您的列是一个字符串,您没有正确导入。
  • 这就是为什么制作一个最小的可重现示例很重要。
  • 第二个错误可能是因为您忘记导入正确的模块(即import datetime as dt 或如果您有import datetime 则将dt 重命名为日期时间)

标签: python pandas datetime


【解决方案1】:

尝试使用 pd.DateTimeIndex 并乘以 1000 以使其变为毫秒(如果需要以秒为单位,您可以忽略乘法)

  df['Date'] = (pd.DatetimeIndex(df['Date']).astype(np.int64) // 10**9) * 1000

print(df)

         Date
1502841600000
1502928000000
1503014400000

【讨论】:

    【解决方案2】:

    您可以将其转换为datetime 并使用timestamp(),而不是手动操作

    类似的东西。

    from datetime import datetime
    
    s = '2017-08-16'
    epoch = datetime.strptime(s, "%Y-%m-%d").timestamp()
    print(epoch)
    # Output -- 1502821800.0
    

    【讨论】:

      【解决方案3】:

      试试这个:

      from datetime import datetime as dt
      
      # String for the date
      s = '2017-08-16'
      
      #Convert string to datetime
      s_dt = dt.strptime(s, '%Y-%m-%d')
      
      #Initialize epoch
      epoch = dt.utcfromtimestamp(0)
      
      #Get your difference from epoch in ms
      linux_time = (s_dt - dt.utcfromtimestamp(0)).total_seconds()*1000
      
      #Your output
      linux_time
      1502841600000.0
      

      这是单个日期对象的代码。您可以创建一个函数并使用 lambda 将其应用于 pandas 列。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 2016-06-09
        • 2015-02-16
        • 2022-08-03
        • 2018-01-08
        • 2018-11-08
        • 2016-12-25
        • 2014-06-22
        • 2017-09-20
        相关资源
        最近更新 更多