首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PandaSQL非常慢

PandaSQL非常慢
EN

Stack Overflow用户
提问于 2018-07-30 09:18:33
回答 2查看 3K关注 0票数 7

我目前正从R转到Python (anconda/Spyder 3),以进行数据分析。在R中,我经常使用大量的。因为我擅长sql查询,所以我不想重新学习data.table语法。使用issues,我从来没有性能问题。

现在,在Python中,我尝试使用pandasql,在193 k行,19列上,一个简单的df = "SELECT * From table LIMIT 1"将永远持续。

我尝试了pysqldf,但是我看到了一个错误:表不存在,但它确实存在。

代码语言:javascript
复制
# -*- 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万行的复杂查询。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-30 12:52:31

好的,找到解决办法了。

  • 完全放弃了Anaconda的安装。
  • 清理相关文件夹。
  • 从零开始安装Python3.6和PIP。
  • 然后pip安装了熊猫熊猫。
  • 启动了我的剧本。在不到一秒钟内执行的脚本(pandasql)
票数 2
EN

Stack Overflow用户

发布于 2022-10-12 11:54:27

pandasql在一个小表上工作得很好,但在一个大表上却没有用(尽管我们已经完成了所有的联接和位置),但比查询实际的数据库要慢得多。在看到这个答案之后,我在谷歌上搜索了更多,我发现duckdb也会和一只熊猫发生冲突。在他们的博客上:

代码语言:javascript
复制
# 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://duckdb.org/2021/05/14/sql-on-pandas.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51590671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档