在pandas数据集上执行SQL查询

时间:2017-08-24 15:30:25

标签: python sqlite pandas

我有一个大熊猫数据集,名为' df'。

我该如何做以下事情;

df.query("select * from df")

谢谢。

对于那些了解R的人来说,有一个名为sqldf的库,你可以在R中执行SQL代码,我的问题基本上是,在python中有一些像sqldf这样的库

6 个答案:

答案 0 :(得分:30)

这不是pandas.query应该做的,您可以查看包pandasql(与R中的sqldf相同)

import pandas as pd
import pandasql as ps

df = pd.DataFrame([[1234, 'Customer A', '123 Street', np.nan],
               [1234, 'Customer A', np.nan, '333 Street'],
               [1233, 'Customer B', '444 Street', '333 Street'],
              [1233, 'Customer B', '444 Street', '666 Street']], columns=
['ID', 'Customer', 'Billing Address', 'Shipping Address'])

q1 = """SELECT ID FROM df """

print(ps.sqldf(q1, locals()))

     ID
0  1234
1  1234
2  1233
3  1233

答案 1 :(得分:4)

使用了一段时间后,我意识到最简单的方法就是做

from pandasql import sqldf

output = sqldf("select * from df")

像一个咒语一样工作,其中df是熊猫数据框 您可以安装pandasql:https://pypi.org/project/pandasql/

答案 2 :(得分:2)

您可以使用DataFrame.query(condition)返回与condition匹配的数据框子集,如下所示:

df = pd.DataFrame(np.arange(9).reshape(3,3), columns=list('ABC'))
df
   A  B  C
0  0  1  2
1  3  4  5
2  6  7  8

df.query('C < 6')
   A  B  C
0  0  1  2
1  3  4  5


df.query('2*B <= C')
   A  B  C
0  0  1  2


df.query('A % 2 == 0')
   A  B  C
0  0  1  2
2  6  7  8

除了隐含SELECT * FROM df WHERE之外,这与SQL语句的效果基本相同。

答案 3 :(得分:0)

实际上我刚刚发布了一个新软件包,称为dataframe_sql。这使您能够根据需要使用SQL查询熊猫数据框。您可以找到软件包here

答案 4 :(得分:0)

或者,您可以使用发挥其最大作用的工具:

  1. 安装postgresql

  2. 连接到数据库:

从sqlalchemy导入create_engine
导入urllib.parse
engconnect =“ {0}:// {1}:{2} @ {3}:{4} / {5}” .format(方言,user_uenc,pw_uenc,host,port,dbname)
dbengine = create_engine(engconnect)
数据库= dbengine.connect()

  1. 将数据框转储到postgres中

df.to_sql('mytablename',数据库,if_exists ='replace')

  1. 使用您的大脑可以处理的所有SQL嵌套语句编写查询。

myquery =“从mytablename中选择不同的*”

  1. 通过运行查询创建数据框:

newdf = pd.read_sql(myquery,数据库)

答案 5 :(得分:0)

我认为比 pandassql 更好的解决方案是 duckdb。它处理映射到数据帧对象的表名的方式更简洁一些。不过我还没有评估性能。