【发布时间】:2018-09-14 19:21:30
【问题描述】:
我有一个包含 5000 万条记录的 csv 文件,我想使用 pandas 来处理它。当我将它加载到数据框中时,我的系统正在挂起。有什么想法会很有帮助吗?
【问题讨论】:
-
使用块逐块处理它也在块内实现你的分析
-
感谢您的回复。
标签: python-3.x pandas data-analysis
我有一个包含 5000 万条记录的 csv 文件,我想使用 pandas 来处理它。当我将它加载到数据框中时,我的系统正在挂起。有什么想法会很有帮助吗?
【问题讨论】:
标签: python-3.x pandas data-analysis
读取 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)
然后您可以查询任何您喜欢的内容。
【讨论】: