我有一列包含一系列时间戳的列。最初我认为它们在 Unix 时间戳系统中,所以我使用以下代码将它们转换为日期时间。
big_frame['date'] = pd.to_datetime(big_frame['filename'],unit='s')
Run Code Online (Sandbox Code Playgroud)
然而,它给了我奇怪的结果,所以我研究了更多,发现时间戳基本上使用 .net 纪元,即 01/01/0001 午夜。所以文件名是从那个时代开始的秒数。如何将数据框中的列转换为正确的日期时间?
例如,如果我有这个
63730342900
Run Code Online (Sandbox Code Playgroud)
结果应该是
14/07/2020 17:01:40
Run Code Online (Sandbox Code Playgroud)
编辑:
https://www.epochconverter.com/seconds-days-since-y0
这是我能找到的唯一正确转换上述时间戳的网站
下面是我要转换的列
0 63729045145
1 63729045145
2 63729045146
3 63729045146
4 63729045146
5 63729045147
6 63729045147
7 63729045147
Run Code Online (Sandbox Code Playgroud)
01/01/0001似乎超出了 datetime/timedelta 类型的范围。我们可以做一些像这样的 hack:
ref_date = pd.to_datetime('14/07/2020 17:01:40')
ref_stamp = 63730342900
bigframe['date'] = pd.to_timedelta(big_frame['date'] - ref_stamp, unit='s') + ref_date
Run Code Online (Sandbox Code Playgroud)
输出:
0 2020-06-29 16:32:25
1 2020-06-29 16:32:25
2 2020-06-29 16:32:26
3 2020-06-29 16:32:26
4 2020-06-29 16:32:26
5 2020-06-29 16:32:27
6 2020-06-29 16:32:27
7 2020-06-29 16:32:27
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)