首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas MemoryError while pd.concat

Pandas MemoryError while pd.concat
EN

Stack Overflow用户
提问于 2016-11-02 14:26:48
回答 1查看 5.3K关注 0票数 2

我正在用熊猫来读csv。

代码语言:javascript
运行
复制
df_from_each_file = (pd.read_csv(StringIO(f)), compression='gzip', dtype=str) for f in all_files)
final_df = pd.concat(df_from_each_file, ignore_index=True)

虽然每个文件的大小较小,但all_files中的总行数约为90,000,000。

当pd.concat运行时,它引用Memory Error失败。

系统有16 GB的内存和16cpu的2ghz each.Is,内存不足在这里?我还能做些什么来删除MemoryError吗?

我读到了块大小等等,但是每个文件都很小,这不应该是一个problem.How,concat可以成为无错误的内存吗?

这是回溯。

代码语言:javascript
运行
复制
final_df = pd.concat(df_from_each_file, ignore_index=True)
File "/home/jenkins/fsroot/workspace/ric-dev-sim-2/VENV/lib/python2.7/site-packages/pandas/tools/merge.py", line 1326, in concat
return op.get_result()
File "/home/jenkins/fsroot/workspace/ric-dev-sim-2/VENV/lib/python2.7/site-packages/pandas/tools/merge.py", line 1517, in get_result
copy=self.copy)
File "/home/jenkins/fsroot/workspace/ric-dev-sim-2/VENV/lib/python2.7/site-packages/pandas/core/internals.py", line 4797, in concatenate_block_managers
placement=placement) for placement, join_units in concat_plan]
File "/home/jenkins/fsroot/workspace/ric-dev-sim-2/VENV/lib/python2.7/site-packages/pandas/core/internals.py", line 4902, in concatenate_join_units
concat_values = _concat._concat_compat(to_concat, axis=concat_axis)
File "/home/jenkins/fsroot/workspace/ric-dev-sim-2/VENV/lib/python2.7/site-packages/pandas/types/concat.py", line 165, in _concat_compat
return np.concatenate(to_concat, axis=axis)
MemoryError

1个文件的df.info为

代码语言:javascript
运行
复制
dtype: object<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12516 entries, 0 to 12515
Columns: 322 entries, #RIC to Reuters Classification Scheme.1
dtypes: object(322)
memory usage: 30.7+ MB
None
EN

回答 1

Stack Overflow用户

发布于 2016-11-03 02:12:09

首先,除非确实需要,否则不要使用dtype=str参数。

查看your next question,如果您将使用以下方法,您将至少需要2*90 if =180 if的内存用于9M行(90 if用于结果DF列表,90 if用于正在连接的DFs列表):

计算17.1GB / 1713078 * (9*10**6) / 1GB

代码语言:javascript
运行
复制
In [18]: 17.1*1024**3/1713078*(9*10**6)/1024**3
Out[18]: 89.8382910760631

所以你必须逐个文件地处理你的数据文件,并将其保存到可以处理这些数据量的文件中-我会使用HDF或数据库,如MySQL / PostgreSQL /等:

代码语言:javascript
运行
复制
fn = r'c:/tmp/test.h5'
store = pd.HDFStore(fn)

df = pd.DataFrame()
for f in all_file_names:
    x = pd.read_csv(f)
    # process `x` DF here
    store.append('df_key', df, data_columns=[<list_of_indexed_columns>], complib='blosc', complevel=5)

store.close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40373683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档