【问题标题】:what is best way to do analysis over database table of million records?对数百万条记录的数据库表进行分析的最佳方法是什么?
【发布时间】:2018-09-14 19:21:30
【问题描述】:

我有一个包含 5000 万条记录的 csv 文件,我想使用 pandas 来处理它。当我将它加载到数据框中时,我的系统正在挂起。有什么想法会很有帮助吗?

【问题讨论】:

  • 使用块逐块处理它也在块内实现你的分析
  • 感谢您的回复。

标签: python-3.x pandas data-analysis


【解决方案1】:

读取 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)

然后您可以查询任何您喜欢的内容。

【讨论】:

  • 谢谢,你也可以自己研究!
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多