2017-05-12 100 views
1

我使用熊貓0.18.1,雖然與此代碼擺弄,熊貓to_sql()將指數

import pd 

def getIndividualDf(item): 
    var1 = [] 
    # ... populate this list of numbers 
    var2 = [] 
    # ... populate this other list of numbers 

    newDf = pd.DataFrame({'var1': var1, 'var2': var2}) 
    newDf['extra_column'] = someIntScalar 
    yield newDf 

dfs = [] 
for item in someList: 
    dfs.append(getIndividualDf(item)) 

resultDf = pd.concat(dfs) 
resultDf['segment'] = segmentId # this is an integer scalar 

from sqlalchemy import create_engine 
engine = create_engine('postgresql://'+user+':'+password+'@'+host+'/'+dbname) 
resultDf.reset_index().to_sql('table_name', engine, schema="schema_name", if_exists="append", index=False) 

我得到這個異常:

(psycopg2.ProgrammingError)欄「關係「表名」的索引不存在

的確,表中沒有這樣的列,只是因爲數據框中沒有這樣的顯式列。這就是爲什麼它很奇怪。

運行

print(list(resultDf)) 

只是to_sql()呼叫之前,收率

[ 'VAR1', 'VAR2', 'extra_column', '段']

卸下index=False來自to_sql()的通話將錯誤更改爲:

(psycopg2.ProgrammingError)列關係 「表格名」 的 「level_0」 不存在

我百思不得其解。我如何擺脫index列?

更新
print(resultDf.head())產生了這樣的信息:

 var1  var2 extra_column segment 
0  8 0.101653 2077869737 201606 
1  9 0.303694 2077869737 201606 
2  10 0.2077869737 201606 
3  11 0.661064 2077869737 201606 
4  12 0.820924 2077869737 201606 
+0

儘量不要reset_index()和在to_sql()調用中添加index = False,也可以向我們顯示resultDF.head() –

+0

resultDF.head()從沒有名稱的基於零索引的列開始,然後繼續wi所有對我感興趣的命名專欄。我會在問題中發佈一個示例。感謝您的幫助,我真的很感激它。 – AlexanderMP

回答

4

我認爲你需要不寫的SQL,之前該指數重置了:

resultDf.to_sql('table_name', engine, schema="schema_name", if_exists="append", index=False) 
+0

你是對的。我仍然不明白爲什麼reset_index()會影響顯式索引= False,但是現在我太累了不能問這樣的問題,並且我很高興終於可以繼續進行我的數據分析了^ _^ – AlexanderMP

+1

@AlexanderMP當您重置索引時,會創建一個名爲level_0的列並使用索引填充它。 –