我正在尝试读取一个大的csv文件(aprox。6 GB),我得到一个内存错误:
MemoryError Traceback (most recent call last)
<ipython-input-58-67a72687871b> in <module>()
----> 1 data=pd.read_csv('aphro.csv',sep=';')
...
MemoryError:
对此有什么帮助吗?
发布于 2014-09-22 01:54:03
该错误表明机器没有足够的内存一次将整个CSV读取到DataFrame中。假设您不需要一次性将整个数据集都放在内存中,避免该问题的一种方法是使用process the CSV in chunks (通过指定chunksize
参数):
chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
process(chunk)
chunksize
参数指定每个块的行数。(当然,最后一个块包含的行数可能少于chunksize
。)
pandas >= 1.2
带有chunksize
的read_csv
返回一个上下文管理器,使用方法如下:
chunksize = 10 ** 6
with pd.read_csv(filename, chunksize=chunksize) as reader:
for chunk in reader:
process(chunk)
请参阅GH38225
发布于 2018-04-17 19:21:25
对于大数据l,建议使用"dask“库
例如:
# Dataframes implement the Pandas API
import dask.dataframe as dd
df = dd.read_csv('s3://.../2018-*-*.csv')
您可以从documentation here中阅读更多信息。
另一个很好的替代方案是使用modin,因为它的所有功能都与pandas相同,但它利用了分布式数据框库,如dask。
在我的项目中,另一个更好的库是datatables。
# Datatable python library
import datatable as dt
df = dt.fread("s3://.../2018-*-*.csv")
发布于 2014-09-24 20:46:24
我是这样做的:
chunks=pd.read_table('aphro.csv',chunksize=1000000,sep=';',\
names=['lat','long','rf','date','slno'],index_col='slno',\
header=None,parse_dates=['date'])
df=pd.DataFrame()
%time df=pd.concat(chunk.groupby(['lat','long',chunk['date'].map(lambda x: x.year)])['rf'].agg(['sum']) for chunk in chunks)
https://stackoverflow.com/questions/25962114
复制相似问题