联接熊猫表read_sql_query()-多索引问题

时间:2019-04-25 10:59:40

标签: oracle pandas dataframe join indexing

我想通过连接两个表来使用pandas.read_sql_query()创建一个熊猫DataFrame。这是我的代码:

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)

1 个答案:

答案 0 :(得分:0)

我无法评论sql查询在做什么,但是您可以在pandas中修复索引。请尝试以下操作:

idx = pd.DataFrame(raw_train_data.index.values.tolist(), columns=["rtd_idx", "nan"]).set_index(
    "rtd_idx"
).index

我希望这会给您一个新索引,然后您可以设置dataframe.index = idx