【发布时间】:2019-09-14 19:04:11
【问题描述】:
我想通过连接两个表来使用pandas.read_sql_query() 创建一个熊猫数据框。这是我的代码:
import pandas as pd
connection = ...
query = 'SELECT T0.*, T1.* FROM %s T0 LEFT JOIN %s T1 ON T0.NUMPERSO = T1.NUMPERSO' % (TABLE, TABLE_VARS)
raw_train_data = pd.read_sql_query(query, connection, index_col='numperso')
上面的代码创建了 df raw_train_data 但随后 raw_train_data.index 返回:
Float64Index([[35477725.0, nan], [56756339.0, nan], [16596475.0, nan],
[15921969.0, nan], [21866760.0, nan], [24199683.0, nan],
[17290497.0, nan], [12785913.0, nan], [37230860.0, nan],
[19049184.0, nan],
...
[11332158.0, nan], [19624233.0, nan], [18763121.0, nan],
[27757040.0, nan], [14169924.0, nan], [15978910.0, nan],
[39321116.0, nan], [27472225.0, nan], [33970568.0, nan],
[14526836.0, nan]],
dtype='float64', name='numperso', length=289907)
我认为问题在于index_col='numperso' 存在于两个表中,但放置index_col='t0.numperso' 会出错,我想使用任何一个“numperso”作为索引。
有没有办法在导入表格时指定只使用一列作为索引?
编辑:
我知道问题在于“NUMPERSO”列属于两个表。通常,在 pd.read_sql_query() 步骤中不会删除两个表中具有相同名称的列。我所做的是不指定索引,删除重复的列(具有相同的名称,例如'NUMPERSO')并手动设置索引:
raw_train_data = pd.read_sql_query(query, connection)
raw_train_data = raw_train_data.loc[:,~raw_train_data.columns.duplicated()]
train_data.set_index('numperso', inplace=True)
【问题讨论】:
标签: oracle pandas dataframe join indexing