python - Pandas to_dict() 将日期时间转换为时间戳
问题描述
在我的 pandas DataFrame 中,我使用datetime
模块将一些日期值从时间戳转换为日期时间。打印出 DataFrame 看起来不错,但是当我使用 将 DataFrame 转换为字典to_dict()
时,日期时间值似乎是 pandasTimestamp
类型。
我的问题类似于这个问题,但我一开始没有熊猫Timestamp
对象,我想保留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}
]
然后我创建一个 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
此输出将正确的日期值显示为日期时间对象。在我的项目中,我在 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
值作为 pandasTimestamp
对象返回?我怎样才能防止这种情况发生?
解决方案
为什么可以在这里找到。
我不知道如何防止它发生,但您可以将 Timestamps 转换为 datetime64 之后:
for rec in list_out:
rec['created'] = rec['created'].to_datetime64()
推荐阅读
- google-cloud-platform - 如何使用 Apache Beam 处理历史时间序列数据?
- python - 获取最接近给定日期的日期列表的索引
- angularjs - 在混合模式下使用来自 Angular 组件的路由
- regex - 正则表达式需要在标签中搜索数字 id
- jmeter - JMeter - 显示 grafana 中的选定步骤
- oracle - 如何使用另一个表的插入触发器更新另一个表的值
- angular - 如何将组件导入Angular中的服务类
- facebook-graph-api - 如何使用 facebook graph api 3.3 版获取好友列表?
- android - 即使在高 API 级别的设备上,Androidx AppCompatButton 看起来也与 Button 不同
- coinbase-api - 如何通过 Coinbase API 进行转换