pandas read_sql将空值导入为0
编辑: 显然,我的连接PYODBC正在将空值读取为0。我想在更高的层次上纠正这个问题,因为我将阅读大量的SQL文件。我在文档中找不到任何可以防止这种情况的东西。有什么建议吗 我正在以字符串形式导入SQL文件/查询,然后使用pd.read\u SQL查询我的数据库。在SQLServer中,我可以在空值之间进行计算,这会导致空值,但是在Python中,这会使我的脚本出错 在SQL Server中运行的查询:pandas read_sql将空值导入为0,sql,sql-server,python-3.x,pandas,pyodbc,Sql,Sql Server,Python 3.x,Pandas,Pyodbc,编辑: 显然,我的连接PYODBC正在将空值读取为0。我想在更高的层次上纠正这个问题,因为我将阅读大量的SQL文件。我在文档中找不到任何可以防止这种情况的东西。有什么建议吗 我正在以字符串形式导入SQL文件/查询,然后使用pd.read\u SQL查询我的数据库。在SQLServer中,我可以在空值之间进行计算,这会导致空值,但是在Python中,这会使我的脚本出错 在SQL Server中运行的查询: SELECT PurchaseOrderID, POTotalQtyVouched, New
SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;
PurchaseOrderID POTotalQtyVouched NewColumn
NULL NULL NULL
007004 8 875.5
008017 21 381.761904761905
008478 NULL NULL
以下是运行SQL Server中的查询后所需的输出:
SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;
PurchaseOrderID POTotalQtyVouched NewColumn
NULL NULL NULL
007004 8 875.5
008017 21 381.761904761905
008478 NULL NULL
在Python中运行查询:
query = '''
...
[Other code defining #POQTYs]
...
SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;
'''
conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
'Server=MSS-SL-SQL;'
'Database=TRACE DB;'
'Trusted_Connection=yes;')
df = pd.read_sql(query, conn)
Python中的错误:
query = '''
...
[Other code defining #POQTYs]
...
SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;
'''
conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
'Server=MSS-SL-SQL;'
'Database=TRACE DB;'
'Trusted_Connection=yes;')
df = pd.read_sql(query, conn)
DataError:'22012','[22012][Microsoft][ODBC驱动程序17 for SQL Server][SQL Server]被零除时遇到错误。8134 SQLFetch'
看起来您的连接会自动将null转换为0,所以当值为null时,只需使用大小写表达式即可防止计算。@DaleBurrell,感谢您为我指明了正确的路径。这将起作用,但由于我将为许多SQL文件做很多这方面的工作,我想找到另一种方法来做这件事。你是否检查过我的建议实际上是这样的?我越想它,就越觉得它不可能,因为计算发生在SQL Server内部,与连接无关。事实上,我认为查询的数据肯定不同。是的,Python中的查询:SELECT PurchaseOrderID,POTotalQtyVouched FROM POQtys返回相同的表,但带有0而不是NULL。我认为这是熊猫的问题。检查此项,尤其是强制浮点参数。