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

DataFrame聚合后日期格式变化的原因及解决方案

问题根源

pandas对datetime64类型的列执行agg(set)聚合时,会自动将datetime对象转换为对应精度的整型时间戳存入集合,丢失了原有的日期格式信息,导致后续无法直接识别原始日期。

推荐解决方案(优先使用)

提前将日期列转为你需要的字符串格式后再执行聚合,从根源避免类型转换问题:

  1. 若A5列已为datetime类型,先做格式转换:
# 日期转目标格式字符串,空值统一填充为'nan'字符串
df['A5'] = df['A5'].dt.strftime('%d/%m/%Y').fillna('nan')
# 执行分组聚合
df = df.groupby(['A1']).agg(set).reset_index()
  1. 若A5列是读入数据时被pandas自动识别为datetime类型,读入时可指定类型为字符串避免自动转换:
# 读csv示例,指定A5列为字符串类型
df = pd.read_csv('你的数据文件路径.csv', dtype={'A5': str})
# 后续直接执行分组聚合即可
df = df.groupby(['A1']).agg(set).reset_index()

备选方案(聚合后再转换)

如果已经完成聚合不想重新跑分组逻辑,可以单独处理A5列的时间戳:

def convert_ts_to_date(val_set):
    date_set = set()
    for v in val_set:
        if pd.isna(v):
            date_set.add('nan')
        else:
            # 时间戳单位根据实际精度调整,示例为纳秒级,若为毫秒级则修改unit为'ms'
            date_set.add(pd.to_datetime(v, unit='ns').strftime('%d/%m/%Y'))
    return date_set

# 对A5列做格式转换
df['A5'] = df['A5'].apply(convert_ts_to_date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:24:00