我想将数据存储在从数据库中获取的numpy数组中。我想确保没有空值(None)转到numpy数组(无论如何都会抛出错误)。我尝试过以下方式,但它不起作用。出于某种原因,NullValueCheck()总是返回true我怎么能知道空值并对它做些什么呢?
import numpy as np
import pyodbc as odbc
cnxn = odbc.connect(conn_string)
cursor = cnxn.cursor()
cursor.execute("""SELECT ID, BuildingID, Title FROM Something"""")
rows = cursor.fetchall()
cnxn.close()
ID = [i[0] for i in rows]
buildingID = [i[1] for i in rows]
title = [i[2] for i in rows]
def NullValueCheck(rows):
if (any(elem is None for elem in rows[0])):
return True
else:
return False
if NullValueCheck(rows):
ID_array = np.fromiter(ID, dtype= np.int32)
修改 事实证明,我不必编写所有代码。我可以使用我想从numpy数组中实现的pandas数据帧来实现相同的效果。
import pandas as pd
import pyodbc as odbc
cnxn = odbc.connect(conn_string)
df = pd.io.sql.read_sql("""SELECT ID, BuildingID, Title FROM Something""", cnxn)
答案 0 :(得分:1)
我发现在源SQL中最容易解决这个问题。 COALESCE
在这里很有用:
df = pd.io.sql.read_sql("""SELECT ID, COALESCE(BuildingID, 0) AS BuildingID, Title FROM Something""", cnxn)
如果0
的值为NULL,则返回BuildingID
。不同的SQL数据库具有特定NULL检查的功能(例如,SQL Server中为ISNULL
,MySQL中为IFNULL
),但COALESCE
是最交叉数据库兼容的。