熊猫to_dict()将日期时间转换为时间戳

时间:2020-10-02 12:18:13

标签: python pandas dataframe datetime timestamp

在我的熊猫DataFrame中,我有一些日期值,这些值是使用datetime模块从时间戳转换为日期时间的。打印出DataFrame看起来不错,但是当我使用to_dict()将DataFrame转换为字典时,datetime值似乎是熊猫Timestamp类型的。

我的问题类似于this question,但是一开始我没有熊猫Timestamp对象,所以我想保留我创建的datetime。提议的解决方案对我也不起作用,因为输出仍然是熊猫Timestamp,但类型为object

输入:

import pandas as pd
from datetime import datetime

list_in = [
    {"name": "a", "created": 1574947970000}, 
    {"name": "b", "created": 1581322065000}, 
    {"name": "c", "created": 1578929177000}
]

然后,我创建一个DataFrame并将每个时间戳转换为datetime格式。 (必须除以1000,因为时间戳以毫秒为单位,并且应该是秒)

df = pd.DataFrame(list_in)
df["created"] = [datetime.fromtimestamp(x / 1000) for x in df["created"]]
print(df)

输出:

  name             created
0    a 2019-11-28 14:32:50
1    b 2020-02-10 09:07:45
2    c 2020-01-13 16:26:17
name               object
created    datetime64[ns]
dtype: object

此输出将正确的日期值显示为datetime对象。在我的项目中,我对DataFrame进行了其他操作,与该主题无关。但是最后,我想将DataFrame转换回这样的字典列表:

list_out = df.to_dict(orient="records")

最终输出:

[{'name': 'a', 'created': Timestamp('2019-11-28 14:32:50')}, 
{'name': 'b', 'created': Timestamp('2020-02-10 09:07:45')}, 
{'name': 'c', 'created': Timestamp('2020-01-13 16:26:17')}]

最终所需的输出:

[{'name': 'a', 'created': datetime.datetime(2019, 11, 28, 14, 32, 50)}, 
{'name': 'b', 'created': datetime.datetime(2020, 2, 10, 9, 7, 45)}, 
{'name': 'c', 'created': datetime.datetime(2020, 1, 13, 16, 26, 17)}]

所以我的问题实际上是,为什么to_dict()返回datetime值作为熊猫Timestamp对象?以及如何防止这种情况发生?

1 个答案:

答案 0 :(得分:0)

为什么可以找到here

我不知道如何防止这种情况的发生,但是您可以将时间戳转换为向后的datetime64:

for rec in list_out:
    rec['created'] = rec['created'].to_datetime64()