如何让pandas.read_sql始终将NULL值转换为NaN值?
解决pandas.read_sql返回列类型不一致的问题
针对你遇到的情况,有几种可靠的方法能让value列始终保持浮点型且NULL值转为NaN:
方法一:读取时指定列类型
在read_sql中通过dtype参数直接指定value列的类型为float,强制pandas将该列解析为浮点型,即使结果全为NULL也会转为NaN:import pandas as pd df = pd.read_sql(your_query, your_connection, dtype={'value': float})方法二:读取后转换列类型
如果无法提前确定类型,读取完成后用pd.to_numeric转换列,errors='coerce'会将非数值(包括None)转为NaN:df['value'] = pd.to_numeric(df['value'], errors='coerce')方法三:在SQL查询中强制类型
修改SQL语句,用CAST将value列强制转为浮点型,让数据库返回明确的数值类型,pandas就能直接识别为浮点列:SELECT date, CAST(value AS FLOAT) AS value FROM your_table WHERE date BETWEEN '2023-10-03 00:00:00' AND '2023-10-04 00:00:00'
原因说明
当查询结果中value列全为NULL时,pandas无法从数据库返回的结果元数据中确定该列的原始数值类型,因此默认用object类型存储None值。上面的三种方法分别从读取前指定类型、读取后转换、数据源强制类型三个层面解决了这个问题。
内容的提问来源于stack exchange,提问作者Thomas Arildsen
相关产品推荐
相关产品推荐

