在Python中将yyyy-mm-dd日期时间的列转换为Linux时间纪元

时间:2018-08-09 06:16:22

标签: python pandas datetime

在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

有什么想法吗?谢谢。

3 个答案:

答案 0 :(得分:0)

尝试pd.DateTimeIndex并乘以1000可以使它变为毫秒(如果需要秒数,则可以忽略乘法)

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

print(df)

         Date
1502841600000
1502928000000
1503014400000

答案 1 :(得分:0)

您可以将其转换为datetime并使用timestamp()

来代替手动进行操作

这样的事情。

from datetime import datetime

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

答案 2 :(得分:0)

尝试一下:

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列。

希望这会有所帮助。