我想通过连接两个表来使用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)
答案 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