【发布时间】:2021-08-03 12:29:09
【问题描述】:
我最近从使用 SAS 切换到 Python。我想用 Python 做一些 SQL 查询。我按如下方式进行操作(table1 和 table2 是 pandas 数据框):
import pandas as pd
import sqlite3
sql = sqlite3.connect(':memory:')
c = sql.cursor()
table1.to_sql('table1sql', sql, if_exists='replace', index=False)
table2.to_sql('table2sql', sql, if_exists='replace', index=False)
df_sql = c.execute('''
SELECT a.*, b.*
FROM table1sql as a
LEFT JOIN table2sql as b
ON a.id = b.id
''')
df = pd.DataFrame(df_sql.fetchall())
df.columns = list(map(lambda x: x[0], c.description)) # get column names from sql cursor
我使用非常大的数据集。有时多达 60 次 mio 观察。查询本身需要几秒钟。但是,“获取”数据集,即将 sql 数据帧转换为 pandas 数据帧,需要很长时间。
在 SAS 中,整个 SQL 查询需要几秒钟的时间。我这样做的方式效率低吗?有没有其他方法可以做我想做的事情?
【问题讨论】: