Gri*_*kin 2 python csv pandas scikit-learn
我目前正在Kaggle上使用Rotten Tomatoes 数据集,同时使用Pandas来操作数据。 DataFrame()
我已经CountVectorizer()从sklearn 中实现了提取特征(大小为 5000)。然后我将 100k 行特征和标签保存到.csv。更准确地说,.csv总共有 10 万行和 5001 列。它的大小大约是 1GB 的内存。
当我尝试阅读.csv 时,问题出现了:
pd.read_csv('train.csv', header=0,
delimiter=",", engine='c', na_filter=False, dtype=np.int64)
Run Code Online (Sandbox Code Playgroud)
CSV解析器使用了过多的 RAM。我的系统上有 8GB 的 RAM,这显然不够。
有什么办法可以减少RAM的使用吗?我不受熊猫图书馆的限制。
您可以尝试使用 中的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)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,每个块都是 50,000 条 Pandas DataFrame 格式的记录。然后遍历 50,000 条记录的每个块,您可以在其中对每个块进行处理并将处理后的 DataFrame 附加到一个新对象(slim_data如上例所示),然后将所有块连接在一起形成一个最终的 DataFrame,您可以在建模中使用.
重申一下,以上仅当在处理每批数据时您正在删除数据元素或以更有效的方式表示数据元素时才有效,否则您将再次遇到内存问题。但是,这将使您不必一次将所有数据加载到内存中。