使用Python和Pandas在数据帧中模拟SQL查询时遇到语法问题

使用Python和Pandas在数据帧中模拟SQL查询时遇到语法问题,python,python-3.x,pandas,sqlite,dataframe,Python,Python 3.x,Pandas,Sqlite,Dataframe,我正在使用: 蟒蛇3 熊猫 本地版上的Sqllite3(尽管 这一点对此不重要) 我有一个项目,我正在尝试从查询中删除一些连接、计数、组和其他聚合函数——它们都需要移动到代码中 我是Python新手,浏览了Pandas手册和其他有关StackOverflow的资源 我正在尝试重新创建以下查询: SELECT D.ID, D.Name, COUNT(W.ID) FROM Departments D LEFT JOIN Widgets W ON D.ID=W.department GROUP B

我正在使用:

  • 蟒蛇3
  • 熊猫
  • 本地版上的Sqllite3(尽管 这一点对此不重要)
我有一个项目,我正在尝试从查询中删除一些连接、计数、组和其他聚合函数——它们都需要移动到代码中

我是Python新手,浏览了Pandas手册和其他有关StackOverflow的资源

我正在尝试重新创建以下查询:

SELECT D.ID, D.Name, COUNT(W.ID)
FROM Departments D
LEFT JOIN Widgets W ON D.ID=W.department
GROUP BY D.ID, D.Name
HAVING COUNT(W.ID)>0
在Python方面-仅使用两个查询:

SELECT * FROM departments
SELECT * FROM widgets
我可能错了,但我相信这是必须发生的:

  • 导入python模块并创建连接
  • 进口大熊猫(据我所知,这是一个有争议的问题) 这类工作的有效工具)
  • 将我的查询分配给变量
  • 熊猫读过这些问题了吗
  • (合并?)查询结果以构造数据帧
  • 使用数据帧上的方法执行计数和聚合
我正在与语法作斗争,并且很难确定我是否以正确的方式进行操作。传递到查询中的两个表都有多个列,超出了我正在处理的范围,这可能是造成困难的原因

结果应该有部门ID、部门名称和属于该部门的小部件计数。以下是我一直在试验的python代码:

import sqlite3
import pandas as pd
...  #functions and connection info removed
with conn:
  sql1="SELECT * FROM departments"
  sql2="SELECT * FROM widgets"
  #print("Read Queries Into Dataframes")
  df = pd.read_sql(sql1, conn)
  lf = pd.read_sql(sql2, conn)
  #print("Connected and read - print the dataframe")
  merged_df=pd.merge(df, lf, left_on='id', right_on='department', how='inner') #.groupby(['id'])
  #result=merged_df.groupby(['id'])
  #result = pd.merge(df, lf, on='key')
  #print(result)
注:

  • 它似乎(大部分)工作,直到我介绍了它出现的小组

  • 我在ID中得到了一个关键错误-可能是语法错误或者我 没有正确的别名

  • 将联接类型(方式)从左改为内会产生一些NAN 结果

Left join将在没有任何小部件的情况下为每个部门提供NaN结果。我会将count()添加到groupby->
merged_-df.groupby(['id']).count()
您也可以按id和name进行分组->
merged_-df.groupby(['id',name']).count()
谢谢大家-非常有用的信息。我可以用以下方法处理这个问题:pd.merge(dfu departments[[“id”,“dname”]),dfu widgets[[“department”,“widgetid”,“purchased”,“Type”]],how='inner',left'u on='id',right'u on='department'