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

如何使用pd.read_sql从SQL表读取NULL值时统一返回为None而非NaN?

实现SQL NULL统一转None的方法

出现同列同时存在NaN和None的原因是:pandas默认读取SQL Server数据时,数值类型列的NULL会被转换为numpy的NaN浮点空值,对象类型列的NULL会被转换为Python原生None,两种空值混存是类型自动推断的结果。

下面是两种可行的实现方案:

方案1:读取时直接指定参数统一输出None

调用pd.read_sql()时添加coerce_float=False参数,关闭pandas自动将数值类NULL强制转换为浮点NaN的逻辑,所有SQL NULL会直接以None形式存入DataFrame:

import pandas as pd
import pyodbc

# 数据库连接示例(根据你的实际配置修改)
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的服务器地址;DATABASE=目标数据库名;UID=账号;PWD=密码')
# 读取时添加coerce_float参数
df = pd.read_sql("SELECT * FROM 你的查询表名", con=conn, coerce_float=False)

方案2:读取完成后批量替换所有NaN为None

如果已经完成数据读取,可以直接对已生成的DataFrame做全局替换:

# 全局替换所有NaN为None
df = df.where(df.notna(), None)

如果仅需要处理指定列(比如示例中的Value列),可以单独修改:

# 仅替换Value列的NaN为None
df['Value'] = df['Value'].where(df['Value'].notna(), None)

注意:如果目标列原本是int、float等数值类型,替换为None后列类型会自动变为object类型,这是pandas数值类型不支持存储原生None的正常表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:06:02