将纪元(即 01/01/0001 午夜)转换为 pandas 中的 DateTime

hye*_*eri 7 python pandas

我有一列包含一系列时间戳的列。最初我认为它们在 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)

Qua*_*ang 3

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)

  • 我想说的是,如果您知道“63730342900”在您的格式中是“14/07/2020 17:01:40”,您可以使用**这些值**作为参考。 (2认同)