2016-08-01 66 views
3

我有一個訂購的Pandas Dataframe。Pandas中的行的排序to_sql

   a0    b0 c0  d0 370025442 370020440 370020436 \ 
1 31/08/2014 First Yorkshire 53 05:10   0 0.8333 1.2167 
2 31/08/2014 First Yorkshire 53 07:10   0  0.85  1.15 
3 31/08/2014 First Yorkshire 53 07:40   0 0.5167 0.7833 
4 31/08/2014 First Yorkshire 53 08:10   0  0.7   1 
5 31/08/2014 First Yorkshire 53 08:40  NaN  NaN  NaN 
6 31/08/2014 First Yorkshire 53 09:00   0  0.5 0.7667 
7 31/08/2014 First Yorkshire 53 09:20   0 0.5833   1 
8 31/08/2014 First Yorkshire 53 09:40   0  0.4  0.7 
9 31/08/2014 First Yorkshire 53 10:20   0 0.5333 1.0333 
10 31/08/2014 First Yorkshire 53 10:40   0 0.4833   1 
11 31/08/2014 First Yorkshire 53 11:00   0 0.3667  0.7 
12 31/08/2014 First Yorkshire 53 11:20   0 0.5333  1.15 
13 31/08/2014 First Yorkshire 53 11:40   0 0.3333 0.7667 
14 31/08/2014 First Yorkshire 53 12:00   0 1.0167  1.5 
15 31/08/2014 First Yorkshire 53 12:40   0  0.75 1.0333 
..   ...    ... .. ...  ...  ...  ... 
737 25/10/2014 First Yorkshire 53 21:40   0 1.0167  1.3 
738 25/10/2014 First Yorkshire 53 22:40   0 0.5667   1 

然而,當我將它轉換爲SQL,順序被改變(行13日起),併成爲:

   a0    b0 c0  d0 370025442 370020440 370020436 \ 
0 31/08/2014 First Yorkshire 53 05:10   0 0.8333 1.2167 
1 31/08/2014 First Yorkshire 53 07:10   0  0.85  1.15 
2 31/08/2014 First Yorkshire 53 07:40   0 0.5167 0.7833 
3 31/08/2014 First Yorkshire 53 08:10   0  0.7   1 
4 31/08/2014 First Yorkshire 53 08:40  None  None  None 
5 31/08/2014 First Yorkshire 53 09:00   0  0.5 0.7667 
6 31/08/2014 First Yorkshire 53 09:20   0 0.5833   1 
7 31/08/2014 First Yorkshire 53 09:40   0  0.4  0.7 
8 31/08/2014 First Yorkshire 53 10:20   0 0.5333 1.0333 
9 31/08/2014 First Yorkshire 53 10:40   0 0.4833   1 
10 31/08/2014 First Yorkshire 53 11:00   0 0.3667  0.7 
11 31/08/2014 First Yorkshire 53 11:20   0 0.5333  1.15 
12 31/08/2014 First Yorkshire 53 14:00   0 0.4833 1.0167 
13 31/08/2014 First Yorkshire 53 16:20   0 0.6833  1.15 
14 31/08/2014 First Yorkshire 53 23:10  None  None  None  
..   ...    ... .. ...  ...  ...  ...  
736 25/10/2014 First Yorkshire 53 21:40   0 1.0167  1.3 
737 25/10/2014 First Yorkshire 53 22:40   0 0.5667   1 

的數據是正確的,這是它一直是行的只是排序改變(這是確認從SQL Server Management Studio中查看SQL表)。我在操作前後檢查了輸入表,並且它保持不變,所以排序問題必須在轉換爲SQL時進行。

用於創建SQL表的代碼是:

engine = sqlalchemy.create_engine("mssql+pyodbc://*server*?driver=SQL+Server+Native+Client+10.0?trusted_connection=yes") 
conn = engine.connect() 
art_array.to_sql(theartsql, engine, if_exists="replace", index=False) 

(其中實際指定的服務器)

什麼可能導致這一點,我怎麼可能解決呢?任何幫助將非常感激......

編輯:我要指出,我使用的版本是:

Python版本:2.7.8

大熊貓版本:0.15.1

SQLAlchemy的版本:1.0.12

這些都需要保持與其他軟件兼容。

+0

難道你不需要'index = True'來保持順序嗎? –

+0

是否將'if_exists =「替換爲''if_exists =」append「'有沒有影響? –

+0

使用index = True包含表的正確索引值,但排序仍然是錯誤的(即索引的順序是:1,2,3,4,5,6,7,8,9,10,11, 18,24,35,43 ....),是的我試着if_exists =「追加」,但它不會改變任何東西。 – PaulB

回答

1

正常Sql表不保持行順序。您需要「按順序」才能得到正確的訂單。在將數據移動到SQL之前,您可以包含行ID(或索引)。那麼,你可以在Sql中「排序」。

嘗試這樣:

df 
     a 
0 1.00 
1 2.00 
2 0.67 
3 1.34 

print df.reset_index().to_sql(xxxx) 
    index  a 
0  0 1.00 
1  1 2.00 
2  2 0.67 
3  3 1.34 

然後在SQL中,你可以「排序依據」指數。「爲了通過」語法可以根據SQL數據庫而有所不同。

+0

謝謝你。完美的感覺... – PaulB

相關問題