2015-12-08 106 views
1

我在這裏有一些奇怪的問題,並卡住了。我正在重寫生成一些CSV文件的Python腳本,並且我需要在MySQL服務器上編寫相同的信息。寫熊貓數據框到MySQL

我設法讓它工作......不知何故。

下面是創建CSV部分:

final_table.get_tunid_town_pivot().to_csv('result_pivot_tunid_town_' + ConsoleLog.get_curr_date_underline() + '.csv', sep=';') 

這裏是一部分將數據加載到MySQL表:

conn = pymysql.connect(host='localhost', port=3306, user='test', passwd='test', db='test') 
final_table.get_tunid_town_pivot().to_sql(con=conn, name='TunID', if_exists='replace', flavor='mysql', index=False, chunksize=10000) 
conn.close() 

的問題是,有在數據幀4列,但在MySQL中,我只獲得最後一列。我不知道爲什麼會發生這種情況,我發現零類似的問題。請幫忙嗎?

+1

你使用的是什麼版本的熊貓?此外,您是否可以使用SQLAlchemy引擎來嘗試此操作(請參閱http://pandas.pydata.org/pandas-docs/stable/io.html#sql-queries)。最後,你可以顯示'final_table.get_tunid_town_pivot()。info()'? – joris

+0

SQLAlchemy是我第一次嘗試結果相同。信息顯示如下:MultiIndex:258條目,(21,85.21.230.5,eriwan)至(21,85.21.230.5,zmm) 數據列(共1列): Count 258非null int64。我怎麼可能這張桌子有1列? – bigbobr

+0

pandas版本是0.17.1 – bigbobr

回答

2

您的DataFrame具有(可能由於旋轉)一個3級和只有1列的MultiIndex。默認情況下,to_sql也會將索引寫入SQL表,但您確實指定了index=False,因此只有一列將寫入SQL。

因此,要麼不指定不包括索引(所以使用index=True),要麼重置索引,然後寫入框架(df.reset_index().to_sql(..., index=False))。

另請注意,在to_sql中使用pymysql連接已被棄用(它應該給您一個警告),您必須通過SQLAlchemy引擎來使用它。

+0

謝謝! 'reset_index()'完美地工作 – bigbobr