将含NaN的Pandas DataFrame存入SQL Server nvarchar列出现n.n问题
问题成因分析
- Pandas里的
NaN是数值类型的缺失标记,并非字符串类型的合法空值。当你的validation字符串列混入NaN时,Pandas不会自动将其映射为SQL的NULL,而是把NaN转换成了字符串'nan'。 - pyodbc执行插入操作时,会直接把这个
'nan'字符串写入SQL Server的nvarchar(max)列。你看到的n.n是数据展示工具的渲染异常,实际存入的是'nan'字符串。 - 其他可空列无此问题,是因为那些列的缺失值类型和对应SQL列类型匹配(比如数值列的
NaN会被pyodbc正确转为SQL的NULL),但字符串列的NaN因类型不兼容,被当作普通字符串处理了。
补充验证
你可以在插入前执行以下代码查看validation列的实际值类型:
print(df['validation'].apply(type))
会发现NaN对应的类型是float而非str,这就是问题的根源。
内容的提问来源于stack exchange,提问作者Nandha Kumar
相关产品推荐
相关产品推荐

