繁体   English   中英

python中SQLite3中的指数

[英]exponential in SQLite3 in python

我正在编写一个 python 代码,它创建一个 SQLite 数据库并对大量表进行一些计算。 首先,我通过 python 在 SQLite 中执行此操作的原因是内存,我的数据很大,如果在 Pandas 中运行,则会出现内存错误。 如果压缩它会花费很长时间,通常是因为熊猫在合并和分组等方面很慢。

所以我现在的问题是在某个时候,我想计算表中一列的指数(下面的示例代码),但似乎 SQLite 没有 EXP 函数。

我可以将数据写入数据帧,然后使用 numpy 来计算 EXP,但这超过了推动我的 twoards DB 的重点,并且没有额外的时间在 DB 和 python 之间来回读/写。

所以我的问题是:有没有办法解决这个问题来计算数据库中的指数? 我读过我可以在 python 中的 sqlite3 中创建函数,但我不知道如何。 如果您知道如何或可以指导我到哪里可以找到相关信息,那么我将不胜感激,谢谢。

我试图进行计算的代码示例,请注意这里我只是提供一个示例,其中表直接来自 csv,但在我的过程中,它实际上是在经过大量 megres 和 group bys 之后在数据库中创建的:

import sqlite3

#set path and files names
folderPath = 'C:\\SCP\\'
inputDemandFile = 'demandFile.csv'

#set connection to database
conn = sqlite3.connect(folderPath + dataBaseName)
cur = conn.cursor()

#read demand file into db
inputDemand = pd.read_csv(folderPath + inputDemandFile)
inputDemand.to_sql('inputDemand', conn, if_exists='replace', index=False)

#create new table and calculate EXP
cur.execute('CREATE TABLE demand_exp AS SELECT from_zone_id, to_zone_id, EXP(demand) AS EXP_Demand FROM inputDemand;')

我读过我可以在 python 中的 sqlite3 中创建函数,但我不知道如何。

那是conn.create_function()

https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.create_function

>>> import math
>>> conn.create_function('EXP', 1, math.exp)
>>> cur.execute('select EXP(1)')
>>> cur.fetchone()
(2.718281828459045,)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM