从 cx_Oracle 个默认数据类型中设置正确的 pandas.DataFrame 个数据类型

Set correct pandas.DataFrame datatypes from cx_Oracle default data types

我有一些 oracle table 下一个字段数据类型:

ID|              NOT NULL NUMBER              
VERSION|         NOT NULL NUMBER              
STAT_ACTUAL|     NOT NULL NUMBER              
REGION|          NOT NULL VARCHAR2(5 CHAR)    
PARENTID|                 NUMBER              
CITY|                 VARCHAR2(5 CHAR)    
...

如果我尝试像这样将它们从 cx_Oracle 添加到 pandas.DataFrame:

import pandas as pd
from sqlalchemy import *

conn = cx_Oracle.connect('datbs/datbs@host/serv')
cursorr = conn.cursor()
SQL  = "select * from table where region = 1"

df= pd.read_sql_query(SQL, con=conn)

数据类型如下:

ID                          int64
VERSION                     int64
STAT_ACTUAL                 int64
REGION                     object
PARENTID                    int64
CITY                       object
...

所以,我所有的 oracle varchar2(在 cx_Oracle 中看起来是 ('REGION', <class 'cx_Oracle.STRING'>))都是 pandas.df!

中的对象

我试着用这个来转换它们:

def OutConverter(value):
    if value is None:
        return ''
    return value

def VarToStr(cursor, name, defaultType, size, precision, scale):
    if defaultType in (cx_Oracle.STRING, cx_Oracle.OBJECT):
        return cursor.var(str, size, cursorr.arraysize, outconverter=OutConverter)

conn.outputtypehandler = VarToStr

但结果还没有被采纳...df.dtypes再次显示对象类型

如何将 oracle 和 cx_Oracle 数据类型映射到 pandas df?

我使用了错误列的手动转换,例如:

newdf = df.astype({"REGION": "Int64", ..., "CITY": "Int32", ...})

输出:

REGION                      int64
CITY                        Int32