Есть ли способ экспортировать результаты запроса sqlite в CSV в Python - PullRequest
0 голосов
/ 07 мая 2019

У меня есть куча файлов CSV (не файл базы данных) с данными в них. Предположим, есть два CSV-файла - Candidate.csv и application.csv

Учитывая электронную почту кандидата, мне нужно извлечь соответствующую информацию из этих двух CSV и извлечь их в отдельные файлы CSV.

Логика - Дано = электронная почта кандидата

Выполнить запрос на кандидате.csv - выберите * из кандидатов, где Email='blah@example.com'

Дамп результатов в Candidate-Filter.csv

Используя столбец "Id" полученной записи-кандидата, выполните запрос к application.csv

Выберите * в приложении, где кандидат ID = 'идентификатор, полученный из предыдущего результата запроса'

выгрузить результат в application-Filter.csv

Мне нужна помощь с выводом результатов в эти отфильтрованные CSV (включая заголовок столбца исходного CSV, поэтому любой, кто просматривает отфильтрованный CSV, знает, какой столбец относится к каким данным)

Я подумал, что могу использовать SQLITE для загрузки CSV-файлов в таблицы памяти и выполнения запросов к ним (и даже экспортировать результат в отдельные CSV-файлы. Теперь в SQLITE есть изящный способ сделать это:

.mode csv 
.import 'Candidate.csv candidates'
.headers on
.output 'Candidate-filtered.csv'
Select * from candidates where Email='blah@example.com'

Однако я хочу использовать Python для этого, потому что мне придется хранить переменные из каждого результата (например, Id полученных кандидатов) и использовать их в следующем запросе (запрос к приложению).

Сейчас я хочу попробовать код, который будет работать на Candidates.csv.

Это код Python, который у меня есть:

import sqlite3
import pandas

def extract_Candidate():

    conn = sqlite3.connect(':memory:')
    data = pandas.read_csv('Candidate.csv') 
    data.to_sql('candidates',conn)
    cur = conn.cursor()
    cur.execute("Select * from candidates where Email='blah@example.com'")
    rows = cur.fetchall()
    conn.close()
    return rows

candidateRows = extract_Candidate()
print(candidateRows)

Мне действительно не нужно возвращать переменнуюандидата. Пока я могу вывести результаты в CSV, это нормально. Я могу напечатать полученные строки в терминале. Я не знаю, как я могу вывести его в новый CSV-файл (мне нужны все заголовки столбцов, которые присутствовали в исходном CSV-файле).

Большинство результатов поиска показывают, как экспортировать базу данных в памяти на диск. Я не хочу файлы .db. Я просто хочу экспортировать результаты запроса в CSV-файл. Я видел некоторый код экспорта в csv, но они представляют собой заголовки столбцов. Я хочу, чтобы он брал все заголовки столбцов в оригинальном csv, без какого-либо жесткого кодирования.

Следующим шагом является получение столбца «Идентификатор» от всех полученных кандидатов и возвращение их в каком-либо массиве или наборе. Я знаю, что это базовый Python, но я ничего не знаю о Python (или sqlite в этом отношении).

Не стесняйтесь критиковать и код (я все еще волнуюсь, может ли pandas.read_csv обрабатывать ОГРОМНЫЕ CSV-файлы или нет; дайте мне знать ваши мысли).

1 Ответ

1 голос
/ 07 мая 2019

Как, вместо того, чтобы добавить сложность sql, вы бы приняли решение, которое работает в чистых пандах? Что касается вашего вопроса об ограничениях размера панд, как правило, единственным ограничением является ваша доступная системная память, которая также будет пределом для решения SQL.

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

import pandas as pd

#we bring in the data
candidates_df = pd.read_csv('Candidate.csv') 
app_df = pd.read_csv('Applications.csv')

#we set the search email
candidate_email = 'blah@example.com'

#we use pandas boolean masking to filter the dataframe and get just the 'id' column
filtered_ids = candidates_df[candidates_df['email']==candidate_email]['id']

#we use the pandas series of ids to filter the applications
filtered_apps = app_df[app_df['id'].isin(filtered_ids)]

#we dump the filtered apps df to a new csv file
filtered_apps.to_csv('directory/file_out.csv')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...