Установите правильные типы данных pandas .DataFrame из cx_ Oracle типов данных по умолчанию - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть таблица oracle со следующим типом данных поля:

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?

1 Ответ

0 голосов
/ 14 февраля 2020

Я использовал ручное приведение неверных столбцов, например:

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

outupt:

REGION                      int64
CITY                        Int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...