在Python中使用行和列ID重构SQL中的表

时间:2015-04-03 13:02:33

标签: python sqlite python-2.7 pandas

我正在读取由我无法控制的程序创建的SQLite表。

这个SQL表的布局背后的想法让我不知所措,但就是这样。

此表在SQL中如下所示:

SQL Table

它到底是什么,以及我想在python-pandas数据帧中得到的是:

Equivalent HTML table

到目前为止,我能想到这样做的唯一方法是获取RowID列表,循环它们并重构表格。

但是我想知道是否有一种更容易和更快的方式(数据库是巨大的),无论是在执行SELECT语句时还是稍后在pandas数据帧本身上。

加载我正在使用的数据:

import pandas as pd
import sqlite3

con = sqlite3.connect(sql_path)
#Simplified here, to produce the Table I filter on a few things
df = pd.read_sql('SELECT * from Table',con=con, index_col='RowID')

我已经拼命尝试并且未能使用包括pd.pivot或pd.groupby在内的一些东西,但可能只是因为我不知道如何正确使用它。

版本:

  

Python:2.7.8 |熊猫:0.16.0 | sqlite3:2.6.0

1 个答案:

答案 0 :(得分:1)

只需设置索引并取消堆栈即可。你可以使用' rowid'而不是'rowname'如果你不想让任何一个出局,或者在解决方案中包含两者,或者在解决方案中包括两者,但就解决方案而言,它是多余的。

df = pd.DataFrame({ 'rowname':[1,1,2,2], 'colname':[1,2,1,2], 'values':['a11','a12','a21','a22'] })

df
   colname  rowname values
0        1        1    a11
1        2        1    a12
2        1        2    a21
3        2        2    a22

df.set_index(['rowname','colname']).unstack()

        values     
colname      1    2
rowname            
1          a11  a12
2          a21  a22