Создание фрейма данных из запроса к базе данных в Python - PullRequest
0 голосов
/ 23 марта 2019

Я очень плохо знаком с python и, прочитав несколько статей в Интернете, я не уверен, что делать дальше.У меня есть файл CSV 3,56 гига, который я пытаюсь разделить на несколько фреймов данных, используя пакеты pandas и sqlalchemy в python.

Я использовал следующий код для преобразования файла CSV в базу данных, и теперь я пытаюсь выполнить запрос к базе данных и сохранить результаты во фрейме данных, называемом test.Однако всякий раз, когда я выполняю код снизу, я получаю следующую ошибку: OperationalError: (sqlite3.OperationalError) near "table": syntax error [SQL: 'SELECT COL1, COL6, COL7 FROM table where COL1 = 2001'] (Background on this error at: http://sqlalche.me/e/e3q8) Я также пытался выбрать все столбцы в базе данных, используя "SELECT* FROM table where COL1 = 2000" в запросе SQL.Тем не менее, он возвращает ту же ошибку.

import pandas as pd
from sqlalchemy import create_engine

file = "/Users/benalbert/Desktop/Econ522/usa_00001.csv"

csv_database = create_engine("sqlite:///csv_database.db")
chunksize = 1000
i = 0
j = 1
for df in pd.read_csv(file, chunksize=chunksize, iterator=True):
      df = df.rename(columns={c: c.replace(' ', '') for c in df.columns}) 
      df.index += j
      i+=1
      df.to_sql('table', csv_database, if_exists='append')
      j = df.index[-1] + 1

test = pd.read_sql_query('SELECT COL1, COL6, COL7 FROM table where COL1 = 
2001', csv_database)

Желаемый вывод - новый фрейм данных, содержащий наблюдения только из столбцов 1, 6 и 7, когда столбец 1 имеет значение 2001.

1 Ответ

0 голосов
/ 23 марта 2019

Вы можете изменить имя таблицы с 'table' на что-нибудь еще, и код работает.Это сработало для меня.

import pandas as pd
from sqlalchemy import create_engine

file = "arandomlargefileIhad.csv"

csv_database = create_engine("sqlite:///csv_database.db")
cnx = csv_database.raw_connection()

chunksize = 1000
i = 0
j = 1
for df in pd.read_csv(file, chunksize=chunksize, iterator=True):
      df.index += j
      i+=1
      df.to_sql('random', csv_database, if_exists='append')
      j = df.index[-1] + 1

sql_statement = "SELECT * FROM random"
test = pd.read_sql_query(sql_statement, csv_database) #this works
test2 = pd.read_sql_query(sql_statement, cnx) #so does this

...