2016-04-20 83 views
0

更新时间:熊猫和SQL炼金术:指定列的数据类型

我看到了一些指导here,但我似乎无法弄清楚如何,当我使用插入来自大熊猫的数据到Oracle指定列类型下面的代码。例如,一列是日期,但是在导入时,它会转换为字符串。

此外,如果我希望列名在我的Oracle数据库中略有不同,是否需要先通过pandas重命名列,然后通过to_sql将它们发送到Oracle?

import pandas as pd 
from sqlalchemy import create_engine 
import cx_Oracle as cx 
pwd=input('Enter Password for server:') 
engine = create_engine('oracle+cx_oracle://schema:'+pwd+'@server:1521/service_name') 
df=pd.read_csv(r'path\data.csv',encoding='latin-1',index_col=0) 
name='table1' 
df.to_sql(name,engine,if_exists='append') 
+1

您必须传递一个表名,如:'df.to_sql('table_name',engine,if_exists ='append')'(实际上您给出的代码应该错误,我认为) – joris

+0

谢谢,@joris。我应该把服务名称放在我有表名的地方,然后按照你的建议添加表名。这工作,所以我现在要看看如何指定字段类型。 –

回答

3

请阅读大熊猫文档SQL Data Types部以及所述to_sql方法。

您可以指定使用dtype参数这样的数据类型:

from sqlalchemy.types import String, Date, DateTime 
df.to_sql(table_name, engine, if_exists='append', dtype={'mydatecol': DateTime}) 

至于列的名称,这是最简单的调用to_sql之前重命名数据框列:

df2 = df.rename(columns={'oldname': 'newname', ...})