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

使用df.to_json(orient="records")时datetime列转数字的解决方法

问题:Pandas DataFrame转JSON时datetime列变为时间戳数字如何解决?

使用df.to_json(orient="records")将Pandas DataFrame转换为JSON时,datetime类型的created_at列被转为时间戳数字,同时NaT值转为了字符串"None"。

转换前的DataFrame数据:

======================================
    id                   name  is_healthy health_updated_at          created_at
0  203  vsds_anpr4_17_850_rhs       False               NaT 2022-12-13 18:29:00
1  202  vsds_anpr4_17_890_rhs       False               NaT 2022-12-13 18:27:00
2  201  vsds_radar_17_700_rhs       False               NaT 2022-12-13 18:26:00
3  200  vsds_radar_17_300_rhs       False               NaT 2022-12-13 18:23:00
4  199   vsds_anpr4_1_000_rhs       False               NaT 2022-09-12 12:00:00
======================================

转换后的JSON数据:

[
   {
      "id":203,
      "name":"vsds_anpr4_17_850_rhs",
      "is_healthy":false,
      "health_updated_at":"None",
      "created_at":1670956140000
   },
   {
      "id":202,
      "name":"vsds_anpr4_17_890_rhs",
      "is_healthy":false,
      "health_updated_at":"None",
      "created_at":1670956020000
   },
   {
      "id":201,
      "name":"vsds_radar_17_700_rhs",
      "is_healthy":false,
      "health_updated_at":"None",
      "created_at":1670955960000
   },
   {
      "id":200,
      "name":"vsds_radar_17_300_rhs",
      "is_healthy":false,
      "health_updated_at":"None",
      "created_at":1670955780000
   },
   {
      "id":199,
      "name":"vsds_anpr4_1_000_rhs",
      "is_healthy":false,
      "health_updated_at":"None",
      "created_at":1662984000000
   }
]

解决方法

方法1:使用to_json内置参数直接处理

利用date_format指定datetime输出格式,同时用default_handler处理NaT值:

import pandas as pd

json_result = df.to_json(
    orient="records",
    date_format='iso',
    default_handler=lambda x: None if pd.isna(x) else str(x),
    indent=2
)
  • date_format='iso':将datetime转为ISO标准字符串(如"2022-12-13T18:29:00")
  • default_handler:自定义空值处理,把NaT转为JSON的null而非"None"字符串

方法2:手动转换列格式后转JSON

先将datetime列转为指定格式的字符串,同时处理NaT值:

import pandas as pd

# 转换created_at为目标格式字符串
df['created_at'] = df['created_at'].dt.strftime('%Y-%m-%d %H:%M:%S')
# 将NaT转为None,避免JSON中出现"None"
df['health_updated_at'] = df['health_updated_at'].apply(
    lambda x: None if pd.isna(x) else x.strftime('%Y-%m-%d %H:%M:%S')
)

# 生成JSON
json_result = df.to_json(orient="records", indent=2)

这种方式可以完全自定义datetime的输出格式,比如你需要的"2022-12-13 18:29:00"格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:00:59