使用Pandas读取Excel时,如何将列名与数据类型转为指定JSON格式?
解决Pandas df.dtypes.to_json()递归溢出错误并生成指定格式JSON
问题原因
df.dtypes返回的是pandas.core.series.Series,其中元素是Pandas/Numpy的dtype对象(如numpy.int64、object),直接调用to_json()时,这些对象的内部递归结构会触发Python递归深度限制,导致OverflowError。
解决方案
先将dtypes转换为普通字符串类型的字典,再序列化JSON:
基础版(保留原始dtype名称)
import pandas as pd import json # 读取Excel文件 df = pd.read_excel("your_file.xlsx") # 转换为列名: dtype字符串的字典 dtype_dict = {col: str(dtype) for col, dtype in df.dtypes.items()} # 生成JSON dtype_json = json.dumps(dtype_dict) print(dtype_json)
输出示例:
{"area": "int64", "area_title": "object"}
自定义类型映射版(匹配你想要的格式)
如果需要将原始dtype名称映射为自定义名称(比如int64转int32,object转string/object),可以添加类型映射表:
import pandas as pd import json df = pd.read_excel("your_file.xlsx") # 自定义类型映射 type_mapping = { "int64": "int32", "object": "string/object", "float64": "float32", "string": "string/object" # 适配Pandas专属的string类型 } # 生成映射后的字典 dtype_dict = { col: type_mapping.get(str(dtype), str(dtype)) for col, dtype in df.dtypes.items() } # 转为JSON dtype_json = json.dumps(dtype_dict) print(dtype_json)
输出示例:
{"area": "int32", "area_title": "string/object"}
核心逻辑
通过字典推导式将每个列的dtype转换为字符串(或自定义映射后的字符串),得到纯Python字典,再用json.dumps()序列化,避免直接处理Pandas dtype对象的递归结构。
内容的提问来源于stack exchange,提问作者Md. Parvez Alam
相关产品推荐
相关产品推荐

