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

如何解决pandas.read_sql()自动将bigint转换为float64的问题

问题原因

ID列存在空值时,pandas原生int64类型不支持存储空值,因此从MySQL读取Bigint(20)类型的ID列时,会自动向上转型为float64,进而出现科学计数法显示、转字符串自带.0后缀、直接转int64报非有限值错误的问题。

解决方案

方案1:转换为支持空值的Int64整数类型(推荐)

pandas 0.24及以上版本提供了可空整数类型Int64(首字母大写),既可以保留整数格式,也兼容空值存储:

df['ID'] = df['ID'].astype('Int64')

转换后空值会显示为<NA>,不会出现科学计数法,也支持正常的数值运算、过滤操作。

方案2:转换为不带.0后缀的字符串类型

如果需要字符串格式的ID,可通过判断空值后再做转换:

  • 保留空值的写法:
import pandas as pd
df['ID'] = df['ID'].apply(lambda x: str(int(x)) if pd.notna(x) else None)
  • 空值统一替换为指定占位符(比如空字符串)的写法:
df['ID'] = df['ID'].fillna(0).astype('int64').astype('str').replace('0', '')
源头规避方法

调用pandas.read_sql时直接指定ID列的类型,避免读取阶段自动转型为float64:

from sqlalchemy import BigInteger
df = pd.read_sql(
    sql="你的查询SQL",
    con=你的数据库连接对象,
    dtype={"ID": BigInteger()}
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:15:02