pandas datetime to unix timestamp seconds

Alw*_*nny 7 python datetime pandas

pandas.to_datetime的官方文档我们可以说,

unit : string, default ‘ns’
Run Code Online (Sandbox Code Playgroud)

arg的单位(D,s,ms,us,ns)表示单位,即整数或浮点数.这将基于起源.例如,unit ='ms'和origin ='unix'(默认值),这将计算unix epoch start的毫秒数.

所以,当我这样尝试时,

import pandas as pd
df = pd.DataFrame({'time': [pd.to_datetime('2019-01-15 13:25:43')]})
df_unix_sec = pd.to_datetime(df['time'],unit='ms',origin='unix')
print(df)
print(df_unix_sec)

                 time
0   2019-01-15 13:25:43
0   2019-01-15 13:25:43
Name: time, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

输出不会改变后者.每次显示日期时间值而不是第二个时间点的unix时期开始的毫秒数.这是为什么?我错过了什么吗?

cs9*_*s95 15

我认为您误解了争论的目的。的目的origin='unix'是将整数时间戳转换 datetime,而不是其他方式。

pd.to_datetime(1.547559e+09, unit='s', origin='unix') 
# Timestamp('2019-01-15 13:30:00')
Run Code Online (Sandbox Code Playgroud)

相反,您可以通过将其转换为整数(以获得纳秒)并除以10 9来获得时间戳。

pd.to_datetime(['2019-01-15 13:30:00']).astype(int) / 10**9
# Float64Index([1547559000.0], dtype='float64')
Run Code Online (Sandbox Code Playgroud)

  • 请注意,推荐的方法会失去精度。本世纪大约 5-6% 的亚秒级精度时间戳无法进行可靠的从 float64 秒到“pd.Timestamp”再转换回 float64 秒的往返转换。您需要除以十亿,例如使用“decimal.Decimal”来获得完整的精度。 (3认同)

Ser*_*kov 8

您可以使用timestamp() 方法,该方法将 POSIX 时间戳返回为浮点数:

pd.Timestamp('2021-04-01').timestamp()

[Out]:
1617235200.0

pd.Timestamp('2021-04-01 00:02:35.234').timestamp()

[Out]:
1617235355.234
Run Code Online (Sandbox Code Playgroud)