sql-server - 如何将 UTC 指定为 Pandas.read_sql
问题描述
我有一个日期为 UTC 的 SQL Server 表。
CREATE TABLE [dbo].[MyTable]
(
[utcDT] [datetime2](7) NOT NULL,
[Rate] [float] NULL
) ON [PRIMARY]
utcDT Rate
-------------------------------------
2012-05-30 20:07:00.0000000 1.237025
2013-09-02 10:55:00.0000000 1.322
2011-06-10 18:46:00.0000000 1.434335
2013-06-13 20:55:00.0000000 1.33736
2016-01-08 04:13:00.0000000 1.088215
询问:
sql_query = "SELECT * FROM [dbo].[MyTable] WHERE [utcDT} >= '2020-01-01'"
connection = pyodbc.connect(connection__DATA)
data = pd.read_sql(sql_query, connection,index_col='utcDT',parse_dates=True)
print(data.index)
print(data.dtypes)
print(data.info())
DatetimeIndex(['2020-11-06 21:07:00', '2020-11-06 21:08:00',
'2020-11-06 21:09:00', '2020-11-06 21:10:00',
'2020-11-06 21:11:00', '2020-11-06 21:12:00',
'2020-11-06 21:13:00', '2020-11-06 21:14:00',
'2020-11-06 21:15:00', '2020-11-06 21:16:00',
...
'2020-11-17 23:50:00', '2020-11-17 23:51:00',
'2020-11-17 23:52:00', '2020-11-17 23:53:00',
'2020-11-17 23:54:00', '2020-11-17 23:55:00',
'2020-11-17 23:56:00', '2020-11-17 23:57:00',
'2020-11-17 23:58:00', '2020-11-17 23:59:00'],
dtype='datetime64[ns]', name='utcDT', length=10000, freq=None)
Rate float64
dtype: object
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 10000 entries, 2020-11-06 21:07:00 to 2020-11-17 23:59:00
Data columns (total 1 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Rate 10000 non-null float64
dtypes: float64(1)
如何确保 pandas 将这些读取为 UTC?
解决方案
为什么不像 Pandas 那样读取数据,然后快速清理以获得您想要的数据?只需创建一个新列,以便您的日期时间对象能够识别时区。
您的输出有些令人困惑,所以我无法判断data['utcDT']
是 DatetimeIndex 还是带有 datetime 对象的标准系列。在任何情况下,您都想使用tz_localize()
(请参阅文档)。
如果是 DatetimeIndex,则
data["utcDTtz"] = data["utcDT"].tz_localize(tz="UTC")
或者如果只是日期时间对象,那么
data["utcDTtz"] = data["utcDT"].dt.tz_localize(tz="UTC")
推荐阅读
- swift - “didReceiveRegistrationToken”没有给我 fcmToken?
- list - 如何在 haskell 中将 [1, 2] 转换为 ['1', '2']?
- python - 如何在 2 个字符串中找到相同的字符?
- python - 将字符串转换为变量名
- excel - 根据具有非法字符的单元格值重命名工作簿中的特定选项卡
- python - 如何在 Python 数据框中查找不共享公共日期(或索引)的行
- javascript - javascript代码未运行,浏览器上的空白页
- kotlin - Kotlin 在最后一个空格中拆分字符串
- ironpython - Spotfire-Ironpython:读取“颜色依据”属性
- node.js - 从 req.headers 获取身份验证信息,实例化一个“API 类”并将其附加到 res.locals ......我怎样才能最好地构建类方法?