You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储多日期值的DataFrame创建字典?

保留日期格式的DataFrame分组转字典方法

原始DataFrame定义

import pandas as pd

df = pd.DataFrame(
    columns=["key", "timestamp_1", "timestamp_2"],
    data=[
        (1, pd.to_datetime("2012-07-16 23:23:50"), pd.to_datetime("2012-07-18 23:23:50")),
        (2, pd.to_datetime("2012-08-16 02:23:50"), pd.to_datetime("2012-09-16 02:23:50")),
        (3, pd.to_datetime("2015-07-16 12:23:50"), pd.to_datetime("2015-08-16 12:23:50")),
        (4, pd.to_datetime("2018-08-16 20:23:50"), pd.to_datetime("2018-09-16 20:23:50")),
    ],
)

问题场景

执行以下代码后,输出结构符合要求,但日期被转为纳秒级时间戳数值,丢失了原日期格式:

df.groupby('key')['timestamp_1', 'timestamp_2'].apply(lambda x: x.values.tolist()).to_dict()

# 输出结果
{1: [[1342481030000000000, 1342653830000000000]],
 2: [[1345083830000000000, 1347762230000000000]],
 3: [[1437049430000000000, 1439727830000000000]],
 4: [[1534451030000000000, 1537129430000000000]]}

解决方案

方法1:转为默认字符串格式

将日期列转为字符串后再生成列表,保留原显示格式:

result = df.groupby('key')[['timestamp_1', 'timestamp_2']].apply(
    lambda x: x.astype(str).values.tolist()
).to_dict()

# 输出示例
# {1: [['2012-07-16 23:23:50', '2012-07-18 23:23:50']],
#  2: [['2012-08-16 02:23:50', '2012-09-16 02:23:50']],
#  ...}

方法2:自定义日期字符串格式

用dt.strftime指定想要的日期格式,比如%Y-%m-%d %H:%M:%S:

result = df.groupby('key')[['timestamp_1', 'timestamp_2']].apply(
    lambda x: x.apply(lambda y: y.strftime('%Y-%m-%d %H:%M:%S')).values.tolist()
).to_dict()

方法3:保留Python原生datetime对象

如果需要后续继续处理日期逻辑,可以转为Python原生的datetime对象:

result = df.groupby('key')[['timestamp_1', 'timestamp_2']].apply(
    lambda x: x.apply(lambda y: y.to_pydatetime()).values.tolist()
).to_dict()

原因说明

原代码中x.values会将pandas的Timestamp对象转为numpy的datetime64类型,调用tolist()时会自动转换为纳秒级整数时间戳。通过先转换为字符串或原生datetime对象,即可避免这种转换,保留日期格式。

内容的提问来源于stack exchange,提问作者cwohlfart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:26:22