Sql server 正在将SQL Server DateTime NULL获取到数据库中

Sql server 正在将SQL Server DateTime NULL获取到数据库中,sql-server,pandas,adodbapi,Sql Server,Pandas,Adodbapi,我在SQL Server中有一个表,其中包括一个DateTime列From_UTC和一个DateTime NULL列To_UTC。我试着把它读入一个数据框 非空列作为一个datetime64很好,但另一个获取数据类型对象 import pandas.io.sql as psql import adodbapi conn = adodbapi.connect(...) df = psql.read_frame("SELECT Unit, To_UTC, From_UTC, CategoryID F

我在SQL Server中有一个表,其中包括一个
DateTime
From_UTC
和一个
DateTime NULL
To_UTC
。我试着把它读入一个
数据框

非空列作为一个
datetime64
很好,但另一个获取数据类型
对象

import pandas.io.sql as psql
import adodbapi
conn = adodbapi.connect(...)
df = psql.read_frame("SELECT Unit, To_UTC, From_UTC, CategoryID FROM T_Alarm WHERE ...", con=conn)
df.dtypes

Unit                  object
To_UTC                object
From_UTC      datetime64[ns]
CategoryID             int64
dtype: object

df.To_UTC[0]
==> pywintypes.datetime(2011, 9, 6, 13, 51, 56)
如果我在查询中包含一个
WHERE To_UTC NOT NULL
,则一切正常

我猜adodbapi、pywintypes.datetime对象和结果中的null的组合会阻止pandas强制转换为正确的类型

我尝试了
df.convert_objects()
,但没有帮助

更新

如果我执行
df.To_UTC=pandas.Series(df.To_UTC,dtype='datetime64[ns]')
然后我得到我想要的数据帧。
但我仍然希望有一个更通用的解决方案,这样我就不必在任何地方使用可为空的日期时间结果进行框架查询。您能告诉我们您的数据是什么样子的吗?尤其是DateTime空列的值?DateTime空列(To_UTC)只是一组日期时间,其中混合了一些空值。正是NULL导致列获取dtype对象,因为当我过滤掉它们(在SQL'where'子句中)时,我得到了预期的结果。数据中的NULL在语义上对代码意味着什么?可以用最小日期值或类似值替换空值吗?不,这个表被很多其他代码(主要是C#)使用,我只是从Python对它进行一些数据分析,所以我无法更改语义/数据结构。表中的行表示一种带有开始和结束时间的报警。仍然打开的报警将仅设置From UTC,而To UTC将为空。当报警关闭时,将设置To_UTC。空值应转换为NaT值。这就是我在“更新:”标题下看到的解决方法