我目前在 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 库。
答案 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中可以在你的建模中使用。
重申一下,只有在处理每批数据时,您才能以更有效的方式删除数据元素或表示数据元素,否则您将再次遇到内存问题。但是,这将使您不得不一次将所有数据加载到内存中。