Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将UTC指定为Pandas.read\u sql_Sql Server_Python 3.x_Pandas - Fatal编程技术网

Sql server 如何将UTC指定为Pandas.read\u sql

Sql server 如何将UTC指定为Pandas.read\u sql,sql-server,python-3.x,pandas,Sql Server,Python 3.x,Pandas,我有一个SQL Server表,它的日期是UTC 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-0

我有一个SQL Server表,它的日期是UTC

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那样读取数据,然后进行快速清理以获得所需的数据?只需创建一个新列,使日期时间对象具有时区意识

您的输出有些混乱,因此我无法判断数据['utcDT']是DatetimeIndex还是带有datetime对象的标准系列。在任何情况下,您都希望使用tz_本地化

如果是DatetimeIndex,则

data["utcDTtz"] = data["utcDT"].tz_localize(tz="UTC")
或者如果只是datetime对象,那么

data["utcDTtz"] = data["utcDT"].dt.tz_localize(tz="UTC")

如果需要了解时区,则不要使用datetime或datetime2列类型,请使用带有0偏移量的UTC datetimeoffset。