0
1 комментарий

3.7.4

manjaro

cx_Oracle ==7.3.0

pandas== 0.25.3

sqlalchemy == 1.2.12

Последовательно описываю что имеется,

и в чем состоит проблема.

Есть 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)

далее, импортирую таблицу в pandas.DateFrame:

import pandas as pd
from sqlalchemy import *
 conn = cx_Oracle.connect('datbs/datbs@host/serv')
cursorr = conn.cursor()
SQL = "select * from table where region = 'Euroupe'"
df= pd.read_sql_query(SQL, con=conn)

дополнение : если выразить df как data для нового pd.DataFrame() или gpd.GeoDataFrame()

проблема не уйдет, см далее:

datatypes выглядят так:

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

Получается все varchar2 (которые захвачены в cx_Oracle как строковые(‘REGION’, <class ‘cx_Oracle.STRING’>)) в pandas.DataFrame — объекты!

Я пытался привести тип данных уже в датафрейме

pd.df.astype({"REGION": str})

но несмотря на «успешное» приведение типов, .dtypes выведет object вновь

Как устранить проблему и корректно импортировать данные из oracle в pandas/geopandas?


postgeographer добавлен комментарий

попробовал указать в запросе для целевых полей TO_CHAR()… не тут то было. Игнорирует. object по прежнему

Добавить комментарий