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

Pandas read_json读取大整数时错误转换为字符串问题

Pandas read_json解析大整数tid时出现类型不一致的问题解决

你遇到的这个问题其实是Pandas在自动类型推断时的常见行为——当JSON里的字符串形式整数在int64的安全范围内时,会被自动转成整数类型;但超过这个范围的大整数,就会被保留为字符串,避免精度丢失。

问题原因

先看你的JSON内容:所有tid的值都是用双引号包裹的字符串,但Pandas的read_json会尝试对这些字符串做类型推断:

  • 像"9999999999999998"(16位)这类数值在int64的范围内(-9223372036854775808 ~ 9223372036854775807),所以会被自动转为整数;
  • 而"10000000000000001"(17位)超过了int64的最大值,Pandas为了避免强制转换导致的精度丢失,就会保留它的字符串类型。

解决方案

下面提供两种直接的解决方法:

方法1:强制指定tid列为字符串类型

通过dtype参数明确指定列类型,让所有tid都保持字符串格式,避免混合类型:

import pandas as pd

json_content=""" { "1": { "tid": "9999999999999998", }, "2": { "tid": "9999999999999999", }, "3": { "tid": "10000000000000001", }, "4": { "tid": "10000000000000002", } } """

df = pd.read_json(
    json_content,
    orient='index',
    convert_axes=False,
    dtype={'tid': str}  # 强制tid列为字符串
)

print(df.info())
print(df['tid'])

方法2:先解析JSON再转为DataFrame(保留大整数)

如果需要把tid作为Python原生大整数存储(而非numpy的int64),可以先用Python标准库解析JSON,手动转换类型后再转成DataFrame:

import pandas as pd
import json

json_content=""" { "1": { "tid": "9999999999999998", }, "2": { "tid": "9999999999999999", }, "3": { "tid": "10000000000000001", }, "4": { "tid": "10000000000000002", } } """

# 解析JSON并将tid转为整数
data = json.loads(json_content)
for entry in data.values():
    entry['tid'] = int(entry['tid'])

# 转为DataFrame
df = pd.DataFrame.from_dict(data, orient='index')

print(df.info())
print(df['tid'])

这种方式下,tid列会是object类型,存储的是Python原生的int对象,可以处理任意大小的整数,不会有精度丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:15:13