pandas 只有列名可用于dtypeMap参数中的键

iklwldmw  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(126)

我已经成功地使用dask read_sql_table从oracle数据库中引入了一个表。但是,当我尝试引入另一个表时,我得到了这个错误KeyError:'只有列名可用作dtypeMap参数中的键。'
我已经检查了我的连接字符串和模式,所有的都很好,我知道表名存在,我试图用作索引的列是oracle数据库中表的主键。
有人能解释一下为什么列名明确存在时会出现这个错误吗?
我知道我可以使用Pandas块,但是在这个场景中我更愿意使用dask。
下面是我如何连接到oracle数据库以及错误消息的最后一部分

host='*******'
port='*****'
sid='****'
user='******'
password='*****'

con_string = 'oracle://' + user + ':' + password + '@' + host + ':' + port + '/' + sid 
engine = create_engine(con_string)

df =ddf.read_sql_table('table_name', uri=con_string, index_col='id', npartitions=None, schema='*****')

~\AppData\Local\Continuum\anaconda 3\lib\站点包\Pandas\核心\泛型. py,类型为(自定义,数据类型,复制,错误,**kwargs)5855
如果col_name不在self中:5856 raise KeyError(-〉5857“只有列名可以用于dtypeMap参数中的“5858“键。”5859)
KeyError:'在dtypeMap参数中,只能将列名用作键。'
今天,我为另一个表添加了ddf.read_sql_table中的所有列名,查询成功了。但是,对于另一个表,我试图通过列出所有列名来做同样的事情,但我得到了上面的KeyError。
谢谢大家。

u3r8eeie

u3r8eeie1#

当列名不匹配或dtypeMap中存在表中不存在的列时,通常会发生此错误。

mqxuamgl

mqxuamgl2#

index_col不是列之一(因为它是 Dataframe 的索引)。要解决您的问题,您必须提供columns参数到read_sql_table,并提供除index_col之外的所有列的列表。
例如,在您的例子中,假设您的表有id、foo和bar列:df = ddf.read_sql_table('table_name', uri=con_string, index_col='id', npartitions=None, schema='*****', columns=['foo', 'bar'])

相关问题