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

如何在DataFrame序列化为JSON Lines文件时保留原日期格式?

解决JSON Lines序列化时日期格式被修改的问题

这个问题本质上是因为pandas的datetime64类型会保留纳秒级精度——即便你的日期显示看起来只到秒,实际存储中可能带有微小的微秒值(比如数据导入时的精度误差,或是后续操作引入的)。当使用date_format='iso'序列化时,pandas会把这些隐藏的微秒部分也输出,导致日期格式多出.000005这样的后缀。

下面是两种可靠的解决方法:

方法1:将日期列转换为指定格式的字符串

这是最直接的方式,能完全控制日期的输出格式,避免pandas自动处理精度:

# 假设你的日期列名为'date'
df['date'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')
# 再序列化到JSON Lines
df.to_json('df.jsonl', orient='records', lines=True)

处理后,日期会以你想要的YYYY-MM-DD HH:MM:SS格式写入文件,不会出现额外的微秒部分。

方法2:截断datetime的微秒部分(保留datetime类型)

如果你想继续保留列的datetime类型,只是去掉微秒部分,可以先对日期列做精度截断:

# 截断到秒级,去掉微秒
df['date'] = df['date'].dt.floor('s')
# 再序列化,此时date_format='iso'会输出不带微秒的ISO格式(注意ISO格式用'T'分隔日期和时间)
# 如果需要保留空格分隔的原始格式,更推荐方法1
df.to_json('df.jsonl', orient='records', lines=True, date_format='iso')

额外检查

你可以先确认日期列是否真的带有微秒:

# 查看日期列的微秒部分
print(df['date'].dt.microsecond)

如果输出不全是0,说明确实存在微秒值,这就是序列化时出现后缀的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:53:11