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

关于pandas中json_normalize解析带时区ISO日期的技术咨询

pandas中json_normalize解析带时区ISO日期的机制
  • 首先明确:你给出的ISODate()是MongoDB专属的日期格式,不属于标准JSON范畴。直接用json_normalize解析会将其识别为字符串,因为JSON本身没有ISODate这个原生类型,必须先预处理转换为标准ISO日期字符串(即去掉ISODate(和)的包裹,保留内部的日期字符串)。

  • 当数据是标准带时区的ISO日期字符串(如"2021-02-01T22:37:37.000+02:00")时,json_normalize仅负责将嵌套JSON平结构化,不会主动解析日期。日期解析由pandas的pd.to_datetime()方法完成,该方法默认支持识别时区信息,生成带时区感知的datetime64[ns, pytz.FixedOffset]类型数据。

  • 完整处理示例:

    1. 预处理MongoDB格式数据,转为标准JSON结构:
      # 原始MongoDB导出数据格式
      raw_data = [
          {
              "startDate": "ISODate(\"2021-02-01T22:37:37.000+02:00\")",
              "entryDate": "ISODate(\"2021-02-01T22:37:37.278+02:00\")"
          }
      ]
      # 预处理去掉ISODate包裹
      processed_data = []
      for item in raw_data:
          cleaned = {}
          for k, v in item.items():
              cleaned[k] = v.replace("ISODate(\"", "").replace("\")", "")
          processed_data.append(cleaned)
      
    2. 使用json_normalize平结构化数据:
      import pandas as pd
      from pandas import json_normalize
      
      df = json_normalize(processed_data)
      
    3. 解析日期字符串为带时区的datetime类型:
      df['startDate'] = pd.to_datetime(df['startDate'])
      df['entryDate'] = pd.to_datetime(df['entryDate'])
      

    处理后的数据列会保留时区信息,例如startDate列的值为2021-02-01 22:37:37+02:00,数据类型为datetime64[ns, pytz.FixedOffset(120)]。

  • 核心结论:json_normalize不承担日期解析职责,仅做数据结构扁平化;带时区的ISO日期解析依赖pandas的datetime处理工具,前提是数据为标准ISO字符串格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:37:16