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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:03:19