簡體   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