首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何避免pandas数据帧中的内存错误?

如何避免pandas数据帧中的内存错误?
EN

Stack Overflow用户
提问于 2021-06-30 10:55:17
回答 1查看 55关注 0票数 0

我在创建dataframe时遇到内存错误。我正在从s3读取压缩文件,并将字节数据写入数据帧,但我得到了内存错误。你能告诉我如何避免这种情况,或者我可以在我的代码中做哪些更改?

代码-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list_table = []
for table in d:
    dict_table = OrderedDict()
    s_time = datetime.datetime.now().strftime("%H:%M:%S")
    print("start_time--->>",s_time)
    print("tablename--->>", table)
    
    s3 = boto3.resource('s3')
    key='raw/vs-1/load-1619/data' +'/'+ table
    obj = s3.Object('*******',key)
    n = obj.get()['Body'].read()
    gzipfile = BytesIO(n)
    gzipfile = gzip.GzipFile(fileobj=gzipfile)
    content = gzipfile.read()
    #print(content)
    content_str = content.decode('utf-8')
    df1 = pd.DataFrame([x.split(',') for x in str(content_str).split('\n')])
    #print(df1)
    #count = os.popen('aws s3 cp s3://itx-agu-lake/raw/vs-1/load-1619/data/{0} - | wc -l'.format(table)).read()
    count = int(len(df1)) - 2
    del(df1)
    e_time = datetime.datetime.now().strftime("%H:%M:%S")
    print("End_time---->>",e_time)
    
    print(count)
    dict_table['Table_Name'] = str(table)
    dict_table['Count'] = count
    list_table.append(dict_table)

我在下面的代码行中遇到内存错误-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1 = pd.DataFrame([x.split(',') for x in str(content_str).split('\n')])

错误-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Traceback (most recent call last):
  File "ravi_sir.py", line 45, in <module>
    df1 = pd.DataFrame([x.split(',') for x in str(content_str).split('\n')])
  File "/app/python3/lib/python3.6/site-packages/pandas/core/frame.py", line 520, in __init__
    mgr = arrays_to_mgr(arrays, columns, index, columns, dtype=dtype)
  File "/app/python3/lib/python3.6/site-packages/pandas/core/internals/construction.py", line 93, in arrays_to_mgr
    return create_block_manager_from_arrays(arrays, arr_names, axes)
  File "/app/python3/lib/python3.6/site-packages/pandas/core/internals/managers.py", line 1650, in create_block_manager_from_arrays
    blocks = form_blocks(arrays, names, axes)
  File "/app/python3/lib/python3.6/site-packages/pandas/core/internals/managers.py", line 1739, in form_blocks
    object_blocks = _simple_blockify(items_dict["ObjectBlock"], np.object_)
  File "/app/python3/lib/python3.6/site-packages/pandas/core/internals/managers.py", line 1784, in _simple_blockify
    values, placement = _stack_arrays(tuples, dtype)
  File "/app/python3/lib/python3.6/site-packages/pandas/core/internals/managers.py", line 1830, in _stack_arrays
    stacked = np.empty(shape, dtype=dtype)
MemoryError
EN

回答 1

Stack Overflow用户

发布于 2021-06-30 12:22:24

使用Pandas系列字符串拆分方法是否有帮助?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# a sample string
content_str = 'a,b,c,d\nd,e,f,g\nh,i,j,k'

content_str = str(content_str).split('\n')
df1 = pd.DataFrame(content_str)
df1 = df1[0].str.split(',', expand=True)

在这里发布,而不是评论,因为在这里发布代码并不美观。

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

https://stackoverflow.com/questions/68193440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文