Проблема с синтаксисом с использованием Python и Pandas для имитации SQL-запроса в Dataframe - PullRequest
0 голосов
/ 20 февраля 2019

Я использую:

  • Python3
  • Pandas
  • Sqllite3 на моем локальном компьютере (будет Postgresql на производстве, хотя это не должно иметь значения для этой цели)

У меня есть проект, в котором я пытаюсь удалить из запросов некоторые объединения, счетчики, группы и другие агрегатные функции - все они должны быть перемещены в код.

Я новичокв 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 и создать соединение
  • Импортировать панд (из чегоя понимаю, что это возможно эффективный инструмент для такого типа работы)
  • Назначьте мои запросы переменной
  • Панды читают запросы
  • (Объединить?) результаты запросапостроить датафрейм
  • Выполнение подсчета и агрегации с использованием методов на фрейме данных

Я борюсь с синтаксисом и не могу определить, правильно ли я поступаю по этому поводу.Обе таблицы, переданные в запросы, имеют несколько столбцов сверх того, с чем я работаю, что может усугубить сложность.

Результат должен содержать идентификатор отдела, имя отдела и количество виджетов, принадлежащихотдел.Вот код 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...