我有一个大熊猫数据集,名为' df'。
我该如何做以下事情;
df.query("select * from df")
谢谢。
对于那些了解R的人来说,有一个名为sqldf的库,你可以在R中执行SQL代码,我的问题基本上是,在python中有一些像sqldf这样的库
答案 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)
或者,您可以使用发挥其最大作用的工具:
安装postgresql
连接到数据库:
从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()
df.to_sql('mytablename',数据库,if_exists ='replace')
myquery =“从mytablename中选择不同的*”
newdf = pd.read_sql(myquery,数据库)
答案 5 :(得分:0)
我认为比 pandassql
更好的解决方案是 duckdb。它处理映射到数据帧对象的表名的方式更简洁一些。不过我还没有评估性能。