And*_*eas 5 python datetime timestamp dataframe pandas
在我的 pandas DataFrame 中,我使用该模块将一些日期值从时间戳转换为日期时间datetime。打印出 DataFrame 看起来不错,但是当我使用 将 DataFrame 转换为字典时to_dict(),日期时间值似乎是 pandasTimestamp类型。
我的问题与这个问题类似,但是我Timestamp一开始就没有 pandas对象,我想保留datetime我首先创建的对象。所提出的解决方案对我来说也不起作用,因为输出仍然是 pandas Timestamp,但是是 dtype object。
输入:
import pandas as pd
from datetime import datetime
list_in = [
{"name": "a", "created": 1574947970000},
{"name": "b", "created": 1581322065000},
{"name": "c", "created": 1578929177000}
]
Run Code Online (Sandbox Code Playgroud)
然后我创建一个 DataFrame 并将每个时间戳转换为一种datetime格式。(除以1000是必要的,因为时间戳以毫秒为单位,应该是秒)
df = pd.DataFrame(list_in)
df["created"] = [datetime.fromtimestamp(x / 1000) for x in df["created"]]
print(df)
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
此输出将正确的日期值显示为日期时间对象。在我的项目中,我对 DataFrame 做了一些与本主题无关的其他魔法。但最后我想将 DataFrame 转换回字典列表,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
最终输出:
list_out = df.to_dict(orient="records")
Run Code Online (Sandbox Code Playgroud)
最终期望的输出:
[{'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')}]
Run Code Online (Sandbox Code Playgroud)
所以我的问题实际上是,为什么返回to_dict()值datetime作为 pandasTimestamp对象?我怎样才能防止这种情况发生?
原因可以在这里找到。
我不知道如何防止这种情况发生,但您可以稍后将时间戳转换为 datetime64:
for rec in list_out:
rec['created'] = rec['created'].to_datetime64()
Run Code Online (Sandbox Code Playgroud)