在Python中使用SQLite对数据库表进行透视查询

138 阅读2分钟

在Python中使用SQLite对数据库表进行透视查询可以通过以下步骤实现。假设我们有一份水果价格数据的表,并希望对其进行透视,以查看每个产品在每个超市中的价格,下面就是通过代码实现的原理解析。

a6.png

1、问题背景

我需要对一个数据库表进行透视查询,将具有相同ID的行汇总到一行输出中。例如,给定一个水果价格表,其中包含了不同超市中不同水果的价格,我希望得到一个汇总表,显示每个水果在每个超市中的价格。空缺处应使用NULL填充。

+--------------------+--------------------+--------------------+ |Fruit |Shop |Price | +--------------------+--------------------+--------------------+ |Apple |Coles |1.50AppleWoolworths1.50 | |Apple |Woolworths |1.60 | |Apple |IGA |1.70BananaColes1.70 | |Banana |Coles |0.50 | |Banana |Woolworths |0.60BananaIGA0.60 | |Banana |IGA |0.70 | |Cherry |Coles |5.00DateColes5.00 | |Date |Coles |2.00 | |Date |Woolworths |2.10ElderberryIGA2.10 | |Elderberry |IGA |10.00 | +--------------------+--------------------+--------------------+

汇总表如下:

+----------+----------+----------+----------+ |Fruit |Coles |Woolworths|IGA | +----------+----------+----------+----------+ |Apple |1.501.50 |1.60 |1.70Banana1.70 | |Banana |0.50 |0.600.60 |0.70 | |Cherry |NULL |5.00NULLDate5.00 |NULL | |Date |2.00 |2.10NULLElderberryNULLNULL2.10 |NULL | |Elderberry|NULL |NULL |10.00 | +----------+----------+----------+----------+

2、解决方案

2.1 使用Python的pandas库

pandas库是一个强大的数据分析库,它提供了透视查询的功能。我们可以使用以下代码来实现透视查询:

import pandas as pd
​
# 将数据加载到pandas DataFrame中
df = pd.DataFrame(data, columns=['Fruit', 'Shop', 'Price'])
​
# 使用pivot()方法进行透视查询
pivot_table = df.pivot(index='Fruit', columns='Shop', values='Price')
​
# 打印透视查询结果
print(pivot_table)

输出结果:

Shop        Coles  IGA  Woolworths
Fruit                              
Apple         1.5   1.7         1.6
Banana        0.5   0.7         0.6
Cherry        5.0   NaN         NaN
Date          2.0   NaN         2.1
Elderberry    NaN  10.0         NaN

2.2 使用Python的itertools库

itertools库提供了生成迭代器的函数,我们可以使用这些函数来实现透视查询。以下是如何使用itertools库实现透视查询的代码:

from itertools import groupby, islice
from operator import itemgetter
from collections import defaultdict
​
# 将数据排序并分组
data = sorted(data, key=itemgetter(0))
groups = groupby(data, itemgetter(0))
​
# 创建一个透视查询结果字典
pivot_table = {}
​
# 遍历分组后的数据
for fruit, group in groups:
    # 创建一个字典来存储每个水果的价格
    prices = defaultdict(lambda: None)
​
    # 将每个水果的价格添加到字典中
    for fruit, shop, price in group:
        prices[shop] = price
​
    # 将字典添加到透视查询结果字典中
    pivot_table[fruit] = prices
​
# 打印透视查询结果
for fruit, prices in pivot_table.items():
    print(fruit, '\t', '\t'.join(str(prices[shop]) for shop in shops))

输出结果:

Fruit        Coles      IGA     Woolw
Apple        1.5        1.7     1.6
Banana       0.5        0.7     0.6
Cherry       5.0        None    None
Date         2.0        None    2.1
Elderberry   None       10.0    None

通过这种方式,我们可以轻松地在Python中使用SQLite进行透视查询,以分析数据并生成报告。为后面的分析提供有力的数据支持。