unix到日期时间的转换不匹配或返回1970-01-01

vzgqcmou  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(345)

我正在尝试将pandas dataframe列从unix转换为datetime,但我要么得到一个不匹配的错误,要么新的日期都是1970-01-01。
以下是列表的尾部示例:
ds y
86 1625616000000 34149.989815
87 1625702400000 33932.254638
88 1625788800000 32933.578199
89 1625875200000 33971.297750
90 1625884385000 33868.766626
当我查看我的unix在datetime中的外观时:

mydatetime = datetime.fromtimestamp(1618185600000 // 1000, tz=tzutc())
print('mydatetime',mydatetime)

我得到:
mydatetime 2021-04-12 00:00:00+00:00
因此,当我使用转换函数时:

df2 = pd.to_datetime(df1['ds'].astype(str), format='%Y-%m-%d %H:%M:%S+%f:%Z')

我得到:
valueerror:时间数据“1618185600000”与格式“%y-%m-%d%h:%m:%s+%f:%z”不匹配(匹配)
但是,当我走这条懒洋洋的路时:

df2 = pd.to_datetime(df1['ds'], unit='ns')

结果是:
86 1970-01-01 00:27:05.616000
87 1970-01-01 00:27:05.702400
88 1970-01-01 00:27:05.788800
89 1970-01-01 00:27:05.875200
90 1970-01-01 00:27:05.886197
名称:ds,类型:datetime64[ns]

g6baxovj

g6baxovj1#

使用 pd.Timestamp 要转换为日期时间:

>>> df['ds'].mul(1e6).apply(pd.Timestamp)

0   2021-07-07 00:00:00
1   2021-07-08 00:00:00
2   2021-07-09 00:00:00
3   2021-07-10 00:00:00
4   2021-07-10 02:33:05
Name: ds, dtype: datetime64[ns]

或由@henryecker建议:

>>> pd.to_datetime(df['ds'], unit='ms')

0   2021-07-07 00:00:00
1   2021-07-08 00:00:00
2   2021-07-09 00:00:00
3   2021-07-10 00:00:00
4   2021-07-10 02:33:05
Name: ds, dtype: datetime64[ns]

相关问题