指定了dtype的Pandas read_sql_query将数据库中的NULL字符串列转换为字符串'None'而不是None

hsvhsicv  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(160)

我有一个如下格式的字符串DB列:

COLUMN_A
NULL
NULL
NULL
STRING_VALUE1
STRING_VALUE2
NULL
...

查询时使用:

pd.read_sql_query('SELECT COLUMN_A FROM TABLE', con=conn, dtype={'COLUMN_A':str})

我得到一个 Dataframe ,格式为:

COLUMN_A
'None'
'None'
'None'
'STRING_VALUE1'
'STRING_VALUE2'
'None'

强调DF中的None值实际上是None字符串表示,例如'None',而不是None值。
这是一个bug还是我没有正确使用read_sql_query?我想我会期望db中的空值Map到值None而不是str值'None'。或者这是sqlalchemy的问题?
我正在使用:

sqlalchemy=1.4.44
pyodbc=4.0.35
pandas=1.5.2
Microsoft SQL Server
6jjcrrmo

6jjcrrmo1#

此问题的解决方法或修复是在panda中使用(目前处于实验阶段)字符串扩展类型,例如

pd.read_sql_query('SELECT COLUMN_A FROM TABLE', 
                  con=conn,
                  dtype={'COLUMN_A': pd.StringDtype()})

这将返回pd.NA形式的空值

相关问题