Pandas`read_csv`方法使用太多RAM

时间:2017-08-06 13:54:24

标签: python pandas csv scikit-learn

我目前在 Kaggle 上使用Rotten Tomatoes dataset,同时使用 pandas DataFrame()来操纵数据。

我已经从 sklearn 实施了CountVectorizer()来提取功能(大小为5000)。然后,我将一行功能和标签保存到 .csv 。更确切地说, .csv 总共有100k行和5001列​​。 它的大小约为1GB内存。

当我尝试阅读 .csv 时,出现了问题:

pd.read_csv('train.csv', header=0, 
             delimiter=",", engine='c', na_filter=False, dtype=np.int64)

CSV解析器使用了太多RAM。我的系统上有8GB的RAM,显然还不够。

有没有办法减少RAM的使用?我并不局限于 pandas 库。

1 个答案:

答案 0 :(得分:4)

您可以尝试使用chunksize中的pandas.read_csv选项。它允许您批量处理数据,避免一次将所有数据加载到内存中。当您处理每个批处理时,您可以删除任何不必要的列,并将数据保存在一个新的,更纤薄的对象中,您可以将其放入内存中。一个例子如下:

chunks = pd.read_csv('train.csv', header=0, delimiter=",", engine='c', na_filter=False, dtype=np.int64, chunksize=50000)

slim_data = []
for chunk in chunks:
    {do your processing here}
final_data = pd.concat(slim_data)

在示例中,每个块都是50,000条记录,格式为pandas DataFrame。然后,遍历50,000个记录的每个块,您可以在其中处理每个块,并将处理后的DataFrame附加到新对象(上面的示例为slim_data),然后将所有块连接到最终的DataFrame中可以在你的建模中使用。

重申一下,只有在处理每批数据时,您才能以更有效的方式删除数据元素或表示数据元素,否则您将再次遇到内存问题。但是,这将使您不得不一次将所有数据加载到内存中。