无法在 Python 中使用 Pandas 或 Blaze 加载大文件(~2gb)
Posted
技术标签:
【中文标题】无法在 Python 中使用 Pandas 或 Blaze 加载大文件(~2gb)【英文标题】:Can't load large file (~2gb) using Pandas or Blaze in Python 【发布时间】:2016-01-13 09:04:23 【问题描述】:我有一个超过 500 万行和 20 个字段的文件。我想在 Pandas 中打开它,但出现内存不足错误:
pandas.parser.CParserError: Error tokenizing data. C error: out of memory
然后我阅读了一些关于类似问题的帖子并发现了 Blaze,但是遵循三种方法(.Data、.CSV、.Table),显然没有一个有效。
# coding=utf-8
import pandas as pd
from pandas import DataFrame, Series
import re
import numpy as np
import sys
import blaze as bz
reload(sys)
sys.setdefaultencoding('utf-8')
# Gave an out of memory error
'''data = pd.read_csv('file.csv', header=0, encoding='utf-8', low_memory=False)
df = DataFrame(data)
print df.shape
print df.head'''
data = bz.Data('file.csv')
# Tried the followings too, but no luck
'''data = bz.CSV('file.csv')
data = bz.Table('file.csv')'''
print data
print data.head(5)
输出:
_1
_1.head(5)
[Finished in 1.0s]
【问题讨论】:
2Gb csv 可能至少为 4Gb(而 IIRC 需要两倍才能解析),但将取决于列,请参阅***.com/questions/18089667/… 尝试使用前十万/百万,看看有多少 RAM你正在使用。这可能是不可能的,所以将其分块并将其转储(到 pytables)。 【参考方案1】:火焰
对于bz.Data(...)
对象,您必须实际执行一些操作才能获得结果。它根据需要加载数据。如果您在终端并输入了
>>> data
您会将头部再现到屏幕上。如果您需要使用打印功能,请尝试
bz.compute(data.head(5))
dask.dataframe
您也可以考虑使用dask.dataframe,它具有与 pandas 相似(尽管是子集)的 API
>>> import dask.dataframe as dd
>>> data = dd.read_csv('file.csv', header=0, encoding='utf-8')
【讨论】:
以上是关于无法在 Python 中使用 Pandas 或 Blaze 加载大文件(~2gb)的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象
在 PySpark 中使用 pandas_udf 时无法填充数组