python-3.x Pandas转换为datetime

p4rjhz4m  于 2023-06-07  发布在  Python
关注(0)|答案(3)|浏览(188)

我收到了一些奇怪格式的日期,我无法将它们读成datetime pandas格式。
例如:736698.0,应该是'2017-01-04T00:00:00.000000000'。因此,原始格式似乎是从1/1/1BC开始的天数(作为零年的第一天,但没有这样的年份,所以它是-1年)。
我试过使用pandas.to_datetime(736698.0, unit='D', origin=datetime.datetime(1/1/0))和其他组合,但我什么都没有得到。

hsvhsicv

hsvhsicv1#

使用numpy来执行此操作,因为它支持“BC”年份:

import numpy as np

>>> np.datetime64('000') + np.timedelta64(736698, 'D')
numpy.datetime64('2017-01-04')

示例:

import pandas as pd

df = pd.DataFrame({'Date': [736698.0]})

df['Date2'] = pd.to_timedelta(df['Date'], unit='D').to_numpy() + np.datetime64('000')

输出:

>>> df
       Date      Date2
0  736698.0 2017-01-04
kx7yvsdv

kx7yvsdv2#

如果你想要一个向量方法,并期望最后的日期是最近的,你可以减去一个有效的epoch:

# use a valid origin
epoch = pd.to_datetime('1970-1-1')
# define the value of this origin relative to your reference
epoch_from_ref = 719527

# perform the conversion
df['date'] = pd.to_datetime(df['col'].sub(epoch_from_ref),
                            unit='D', origin=epoch)

输出:

col       date
0  736698 2017-01-05

使用的输入:

df = pd.DataFrame({'col': [736698]})
nimxete2

nimxete23#

您可以使用以下命令将给定的浮点数转换为日期时间。由于我们不能设置year=0,我们必须从最终结果中减去它:

df['Date'] = df['Date_num'].apply(lambda x: datetime.datetime(1,1,1) + datetime.timedelta(x) - datetime.timedelta(366))

# Output
# Date_num  Date
# 736698.0  2017-01-04

相关问题