gpt4 book ai didi

python - 在 SQLAlchemy 中创建交叉表查询

转载 作者:行者123 更新时间:2023-12-01 04:33:01 31 4
gpt4 key购买 nike

我在 google 和 sqlalchmey 文档上做了一些阅读,但找不到任何类型的内置功能,可以采用标准续集格式化表并将其转换为 Microsoft Access 等交叉表查询。

我过去在使用 Excel 和 microsoft access 时创建过“交叉表”查询。以下是示例的后续代码:

TRANSFORM Min([Fixed Day-19_Month-8_142040].VoltageAPhase) AS MinOfVoltageAPhase
SELECT [Fixed Day-19_Month-8_142040].Substation, [Fixed Day-19_Month-8_142040].Feeder, [Fixed Day-19_Month-8_142040].MeterID
FROM [Fixed Day-19_Month-8_142040]
GROUP BY [Fixed Day-19_Month-8_142040].Substation, [Fixed Day-19_Month-8_142040].Feeder, [Fixed Day-19_Month-8_142040].MeterID
PIVOT [Fixed Day-19_Month-8_142040].Date;

对于续集,我非常不熟练,我能够编写此内容的唯一方法是在访问中生成它。

我的问题是:“由于 SQL alchemy python 代码实际上只是使用 python 函数/方法调用或生成续集代码的好方法,所以有没有一种方法可以使用 SQL alchemy 调用生成续集代码的自定义查询(在上面的 block 中)进行交叉表查询?显然,我必须更改一些后续代码以使用正确的字段和名称将其插入,但关键字应该相同,对吗?

另一个问题是...除了返回表中每个条目的对象之外,我还需要字段名称...我认为这称为“元数据”?最终目标是一旦我有了这些信息,我想使用另一个包输出到 excel 或 csv。

已更新

好的,Van 建议使用 pandas,我认为这是可行的方法,我目前正在研究如何创建交叉表:

def OnCSVfile(self,event):

query = session.query(Exception).filter_by(company = self.company)
data_frame = pandas.read_sql(query.statement,query.session.bind) ## Get data frame in pandas
pivot = data_frame.crosstab()

所以我一直在阅读您提供的 pandas 链接,并对参数有疑问。

pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True)

由于我在数据框对象上调用“交叉表”,因此我认为数据框必须有某种内置方式来识别列和行名称。对于索引,我将传入一个字符串列表,该列表指定我想要在行中列出哪些字段? 我会传入一个字符串列表,指定我想要列中的哪个字段?根据我对交叉表查询的了解, 应该只有一个规范字段,对吗?对于值,我想要最小值函数,所以我必须传递一些参数来返回最小值。目前正在寻找答案。

因此,如果我的平面数据框中有以下字段(我原来的 Sequel 查询)。

Name, Date and Rank

我想按如下方式旋转数据:

Name = Row of Crosstab

Date = Column of Crosstab

Rank = Min Value of Crosstab

函数调用是否类似于:

data_frame.crosstab(['Name'], ['Date'], values=['Rank'],aggfunc = min)

我尝试了下面的代码:

    query = session.query(Exception)
data_frame = pandas.read_sql(query.statement,query.session.bind)
row_list = pandas.Series(['meter_form'])
col_list = pandas.Series(['company'])
print row_list
pivot = data_frame.crosstab(row_list,col_list)

但是我收到有关 data_frame 没有属性交叉表的错误:

enter image description here

最佳答案

我想这对您来说可能一次性有太多新信息。尽管如此,我会以完全不同的方式对待它。我基本上会使用 pandas python 库来完成所有任务:

  1. 检索数据:由于您已经在使用sqlalchemy,您只需在数据库中查询所需的数据即可(扁平化,无需任何 CROSSTAB/枢轴)

  2. 转换:将其放入pandas.DataFrame中。例如,像这样:

    import pandas as pd

    query = session.query(FixedDay...)
    df = pd.read_sql(query.statement, query.session.bind)
  3. 数据透视:调用pivot = df.crosstab(...)在内存中创建数据透视。请参阅pd.crosstab了解更多信息。

  4. 导出:使用 DataFrame.to_excel 将其保存到 Excel/csv

关于python - 在 SQLAlchemy 中创建交叉表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126699/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com