0

我有一个这样的数据集:

df = pd.DataFrame({'name': ['Amy', 'Chris', 'Sam'], 'date': [1.597104e+12, 1.600906e+12, np.nan]})
print(df)

   name          date
0   Amy  1.597104e+12
1 Chris  1.600906e+12
2   Sam           NaT

我检查了显示 float64 的日期类型,然后我用来pd.to_datetime转换它。但我得到的结果是不正确的。

df['date'] = pd.to_datetime(df['date'])
print(df)

    name                     date
0    Amy  1970-01-01 00:26:37.104
1  Chris  1970-01-01 00:26:40.906
2    Sam                      NaT

我也试过df['date'] = pd.to_timedelta(df['date'], unit='d') + pd.to_datetime('1899-12-30')了,但下面的结果仍然不正确。

    name                           date
0    Amy  2055-09-23 23:20:48.000057344
1  Chris  1839-08-30 13:23:48.304879616
2    Sam                            NaT

我真的不知道如何解决这个问题,所以有人可以在这里提供帮助吗?先感谢您!

4

2 回答 2

0

这是一个 Unix time_t 值(自 1970-01-01 以来的秒数),但以毫秒为单位。第一个是 2020-08-11。Pandas 期望浮点时间值以纳秒为单位。因此,这将起作用:

df['date'] = pd.to_datetime(df['date'] * 1000000)

如:

>>> pd.to_datetime(df['date']*1000000)
0   2020-08-11 00:00:00
1   2020-09-24 00:06:40
2                   NaT
Name: date, dtype: datetime64[ns]
>>>
于 2021-07-19T20:55:23.950 回答
0

正如蒂姆所提到的,您的单位不是pandas.to_datetime()的默认单位。而且,虽然他的方法确实有效,但对于大量转换,它可能不是您想要的,因为额外的步骤增加了大约 8% 的计算时间。所以这

在此处输入图像描述

对比这个

在此处输入图像描述

两者都给你:

    name    date
0   Amy     2020-08-11 00:00:00
1   Chris   2020-09-24 00:06:40
2   Sam     NaT
于 2021-12-12T06:58:25.090 回答