python - Pandas to_sql 中行的排序

标签 python pandas

我有一个订购的 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

需要维护这些以与其他软件兼容。

最佳答案

那是正常SQL 表不维护行顺序。您需要“订购依据”才能获得正确的订单。在将数据移动到 SQL 之前,您可以包含一个行 ID(或索引)。那么,那么你就可以在Sql中“order by”了。

尝试这样的事情:

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 数据库而异。

关于python - Pandas to_sql 中行的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703823/

相关文章:

python - Pandas 数据框 groupby : produce multiple output columns

python-3.x - 应用自定义函数从字符串中提取数字到 Python 中的多列

python - 自动提供保存文件名?

Python - 遗传算法错误的帮助

Python:将不同列的值分组到时间桶中

python - pandas groupby,只保留第一次出现的行

python - json.decoder.JSONDecodeError : Expecting ',' delimiter: line 1 column 21641 (char 21640)

python - 将列表的第一个元素乘以给定数字并计算结果列表的累积乘积

python - 在 python 中转置/旋转矩阵 block

python - Pandas:从受限列范围内的每一行获取随机子集的有效方法