关于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]类型数据。完整处理示例:
- 预处理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) - 使用json_normalize平结构化数据:
import pandas as pd from pandas import json_normalize df = json_normalize(processed_data) - 解析日期字符串为带时区的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)]。- 预处理MongoDB格式数据,转为标准JSON结构:
核心结论:
json_normalize不承担日期解析职责,仅做数据结构扁平化;带时区的ISO日期解析依赖pandas的datetime处理工具,前提是数据为标准ISO字符串格式。
内容的提问来源于stack exchange,提问作者vfarmak
相关产品推荐
相关产品推荐

