繁体   English   中英

在熊猫中加载大型csv文件

[英]Loading large csv file in pandas

我正在尝试在熊猫数据框中加载csv文件。 但是,Python在加载文件时占用了大量内存。 例如,csv文件的大小为289 MB,但在我尝试加载文件时,内存使用量约为1700 MB。 此时,系统显示内存错误。 我也尝试过块大小,但问题仍然存在。 谁能告诉我前进的方向吗?

好,首先,不要混淆磁盘大小和内存大小。 CSV的核心是纯文本文件,而pandas数据框是加载到内存中的复杂对象。 就是说,鉴于我不知道您的csv文件中有什么内容,因此我无法就您的特殊情况发表声明。 因此,我将为您提供一个在计算机上具有类似大小的csv的示例:

-rw-rw-r--  1 alex users 341M Jan 12  2017 cpromo_2017_01_12_rec.csv

现在阅读CSV:

>>> import pandas as pd
>>> df = pd.read_csv('cpromo_2017_01_12_rec.csv')
>>> sys:1: DtypeWarning: Columns (9) have mixed types. Specify dtype option on import or set low_memory=False.
>>> df.memory_usage(deep=True).sum() / 1024**2
1474.4243307113647

熊猫将尽最大努力对其进行优化,但它不可能做到不可能。 如果您的内存不足,那么这个答案是一个很好的起点 另外,您也可以尝试使用dask,但我认为对于小型csv而言这工作太多了。

您可以使用库“ dask”
例如:

# Dataframes implement the Pandas API
import dask.dataframe as dd`<br>
df = dd.read_csv('s3://.../2018-*-*.csv')

尝试这样-1)加载dask,然后2)转换为熊猫

import pandas as pd
import dask.dataframe as dd
import time
t=time.clock()
df_train = dd.read_csv('../data/train.csv', usecols=[col1, col2])
df_train=df_train.compute()
print("load train: " , time.clock()-t)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM