我目前正从R转到Python (anconda/Spyder 3),以进行数据分析。在R中,我经常使用大量的。因为我擅长sql查询,所以我不想重新学习data.table语法。使用issues,我从来没有性能问题。
现在,在Python中,我尝试使用pandasql,在193 k行,19列上,一个简单的df = "SELECT * From table LIMIT 1"将永远持续。
我尝试了pysqldf,但是我看到了一个错误:表不存在,但它确实存在。
# -*- coding: utf-8 -*-
import pandas as pd
import pandasql
import pysqldf
#Data loading
orders = pd.read_csv('data/orders.csv',sep = ';')
###### PANDASQL ######
test = pandasql.sqldf("SELECT orders_id from orders LIMIT 1;",globals())
# Will last several minutes and use a lot of RAM
test = pandasql.sqldf("SELECT orders_id from orders LIMIT 1;",locals())
# Will last several minutes and use a lot of RAM
###### PYSQLDF ######
sqldf = pysqldf.SQLDF(globals())
test = sqldf.execute("SELECT * from orders LIMIT 1;")
#error
#Error for pysqldf
Traceback (most recent call last):
File "<ipython-input-12-30b645117dc4>", line 1, in <module>
test = sqldf.execute("SELECT * from orders LIMIT 1;")
File "C:\Users\p.stepniewski\AppData\Local\Continuum\anaconda3\lib\site-packages\pysqldf\sqldf.py", line 76, in execute
self._del_table(tables)
File "C:\Users\p.stepniewski\AppData\Local\Continuum\anaconda3\lib\site-packages\pysqldf\sqldf.py", line 117, in _del_table
self.conn.execute("drop table " + tablename)
OperationalError: no such table: orders我是不是遗漏了什么?在“学习熊猫查询语法”之前,更倾向于使用pandasql/pysqldf回答。
R中的Sqldf在i7/12G内存笔记本电脑上处理高达1000万行的复杂查询。
谢谢!
发布于 2018-07-30 12:52:31
好的,找到解决办法了。
发布于 2022-10-12 11:54:27
pandasql在一个小表上工作得很好,但在一个大表上却没有用(尽管我们已经完成了所有的联接和位置),但比查询实际的数据库要慢得多。在看到这个答案之后,我在谷歌上搜索了更多,我发现duckdb也会和一只熊猫发生冲突。在他们的博客上:
# to install: pip install duckdb
import pandas as pd
import duckdb
mydf = pd.DataFrame({'a' : [1, 2, 3]})
print(duckdb.query("SELECT SUM(a) FROM mydf").to_df())而且它在我的笔记本电脑上非常快,而且使用所有的内核。仍然需要大量的内存,但我认为那是潘达斯。
https://stackoverflow.com/questions/51590671
复制相似问题