【问题标题】:Join tables in pandas read_sql_query() - multi index problem在 pandas read_sql_query() 中加入表 - 多索引问题
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,谢谢。这与我所做的类似(请参阅编辑)。但是我很想知道在导入join语句创建的表时是否可以直接这样做。
    猜你喜欢
    • 2019-08-26
    • 2021-06-17
    • 2019-05-22
    • 1970-01-01
    • 2014-07-10
    • 2017-02-28
    • 1970-01-01
    • 2023-03-25
    • 2017-04-16
    相关资源
    最近更新 更多