Каков наилучший способ сделать анализ таблицы базы данных из миллионов записей? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть CSV-файл с 50 млн записей, и я хотел бы справиться с ним с помощью панд.Пока я загружаю его во фрейм данных, моя система зависает.Какие-нибудь мысли были бы отличными помощниками?

1 Ответ

0 голосов
/ 14 сентября 2018

Прочитайте CSV-файл и сохраните его в базе данных SQLite в памяти.

import pandas as pd
from sqlalchemy import create_engine # database connection
import datetime as dt
disk_engine = create_engine('sqlite:///311_8M.db') # Initializes database with filename 311_8M.db in current directory
start = dt.datetime.now()
chunksize = 20000
j = 0
index_start = 1

for df in pd.read_csv('big.csv', chunksize=chunksize, iterator=True, encoding='utf-8'):

    df = df.rename(columns={c: c.replace(' ', '') for c in df.columns}) # Remove spaces from columns

    df['CreatedDate'] = pd.to_datetime(df['CreatedDate']) # Convert to datetimes
    df['ClosedDate'] = pd.to_datetime(df['ClosedDate'])

    df.index += index_start

    # Remove the un-interesting columns
    columns = ['Agency', 'CreatedDate', 'ClosedDate', 'ComplaintType', 'Descriptor',
               'CreatedDate', 'ClosedDate', 'TimeToCompletion',
               'City']

    for c in df.columns:
        if c not in columns:
            df = df.drop(c, axis=1)    


    j+=1
    print '{} seconds: completed {} rows'.format((dt.datetime.now() - start).seconds, j*chunksize)

    df.to_sql('data', disk_engine, if_exists='append')
    index_start = df.index[-1] + 1

df = pd.read_sql_query('SELECT * FROM data LIMIT 3', disk_engine)

Затем вы можете запросить что угодно.

...