我订购了一个Pandas Dataframe。
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
Pandas版本:0.15.1
SQLalchemy版本:1.0.12
这些都需要保持与其他软件兼容。
答案 0 :(得分: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中,您可以“按顺序”索引。“order by”语法可能因SQL数据库而异。
答案 1 :(得分:-2)
对于仍在研究此问题的任何人。我发现使用选项method="multi"
可以保留订单。默认情况下,该方法为无,即“使用标准SQL INSERT子句(每行一个)”。通过指定multi
方法,它“在单个INSERT子句中传递多个值”。
df.tosql(method="multi")