阅读大型数据集Pandas

时间:2017-10-19 15:15:27

标签: python database pandas numpy dataframe

我正在尝试读取20gb的数据集。我已经搜索了一个解决方案,我试过了:

   data = pd.read_csv('dataset.csv', chunksize=1000,usecols=fields)
   df = pd.concat(data, ignore_index=True)

但在传递到concatenate时仍然会出现内存错误。 (我多次改变chunksize,仍然相同)

我有16GB的RAM工作在3000mhz。

有什么建议吗?

我正在尝试将数据导入数据框以进行数据分析,并将其导出回导出。 (需要从nans和噪声数据中清除数据。)

1 个答案:

答案 0 :(得分:1)

不确切地知道你想要/需要用数据完成什么确实使得这很棘手 - 但大多数数据操作都可以用SQL完成,因此我建议使用sqlite3作为数据处理引擎。

sqlite3将数据存储在磁盘上,并将避免将20Gb数据读入16Gb或RAM的不可能性。

另外,请阅读pandas.DataFrame.to_sql

的文档

您将需要类似(未经测试)的内容:

import sqlite3
conn = sqlite3.connect('out_Data.db')

data = pd.read_csv('dataset.csv', chunksize=1000, usecols=fields)

for data_chunk in data:
    data_chunk.to_sql(conn, if_exists='append')

c = conn.cursor()
c.execute("SELECT * FROM data GROUPBY variable1")
<<<perform data manipulation using SQL>>>

请记住,除非您执行的操作大大减少了内存占用,否则您无法将数据带入pandas数据框。

要转换回.csv,请关注Write to CSV from sqlite3 database in python

为了获得更好的表现:

  • 将块大小增加到系统可以处理的最大值
  • sqlite3 CLI实际上有自动导入.csv文件的方法比通过python快得多。