我正在读取由我无法控制的程序创建的SQLite表。
这个SQL表的布局背后的想法让我不知所措,但就是这样。
此表在SQL中如下所示:
它到底是什么,以及我想在python-pandas数据帧中得到的是:
到目前为止,我能想到这样做的唯一方法是获取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
答案 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