私はそれを再現することはできません。
オラクル:
create table tab1 (id number, col1 number);
create table tab2 (id number, col2 varchar2(10));
insert into tab1 values(1, 10);
insert into tab1 values(2, 11);
insert into tab1 values(3,12);
insert into tab2 values(1,'aaa');
insert into tab2 values(2,'bbb');
insert into tab2 values(3,'ccc');
commit;
のPython:
import pandas as pd
import cx_Oracle
from sqlalchemy import types, create_engine
usr = 'ora_user'
pwd = 'ora_pwd'
tns = """
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test-rac-scan.wirecard.sys)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <MY_SERVICE_NAME>.wirecard)
)
)
"""
qry = """
select a.col1,b.col2
from tab1 a, tab2 b
where a.id = b.id
"""
engine = create_engine('oracle+cx_oracle://%s:%[email protected]%s' % (usr, pwd, tns))
df = pd.read_sql(qry, engine)
結果:
In [12]: df
Out[12]:
col1 col2
0 10 aaa
1 11 bbb
2 12 ccc
In [13]: df.dtypes
Out[13]:
col1 int64 # <-------- NOTE !
col2 object
dtype: object
モジュールのバージョン:
In [14]: cx_Oracle.__version__
Out[14]: '5.3'
In [15]: pd.__version__
Out[15]: '0.19.2'
In [17]: sqlalchemy.__version__
Out[17]: '1.1.5'
UPDATE:
各データフレームの列がPandas.Series型のオブジェクトである - それは、列のDTYPEとは何の関係もありません:あなたはdtype
を確認したい場合は
In [50]: type(df['col1'])
Out[50]: pandas.core.series.Series
In [51]: type(df['col2'])
Out[51]: pandas.core.series.Series
In [52]: type(df)
Out[52]: pandas.core.frame.DataFrame
を(OracleからOracle列のデータ型)を使用するとDataFrame.dtypes
属性:
In [53]: df.dtypes
Out[53]:
col1 float64
col2 object
dtype: object
質問は明確ではありません。どのデータ型がOracleでは 'a.col1'と' b.col2'を持っていますか? – MaxU
col1は数値で、col2はvarchar – abhi1489
です。したがって、対応する 'dtype'はあなたがPandasで期待するでしょうか? – MaxU