mark--pandas使用细节(1)

在大数据处理中,pandas的DataFrame操作效率至关重要。文章指出,应避免使用append方法,因为它每次都会创建新对象,导致耗时。推荐使用list收集数据后一次性创建DataFrame或利用concat函数。实验结果显示,直接从list中创建DataFrame和使用extend方法效率更高。总结了三种方法的优劣,为高效数据处理提供参考。
摘要由CSDN通过智能技术生成

前言

Dataframe在数据处理过程中起到至关重要的作用。在处理大量数据时,如何提高datafreme的效率,在实际使用过程遇到的一些问题,在此记录下来,以便以后查找。

运行环境说明:pandas 1.2.4 +python3.7.10


1 创建dataframe

     慎用append     

     dataframe.append会创建一个新对象(和python list的append不一样,这里总是踩坑,输出空的dataframe),因此这样会降低效率且占用很多内存。这里有两个替代方法:

1)将数据用list封装好,一次性创建

2)每次创建一个dataframe添加到list中,最后用concat连接

import pandas as pd
import numpy as np
from datetime import datetime

max_shape = 30000
data={'a': [np.random.rand() for _ in range(1000)], 'b': [np.random.rand() for _ in range(1000)]}
if 1:
    start = datetime.now()
    res = pd.DataFrame()
    for i in range(max_shape):
        res = res.append(data,ignore_index=True)
    print('append use time:%s s.' % (datetime.now() - start))
if 1:
    start = datetime.now()
    list1 = [ pd.DataFrame(data) for _ in range(max_shape)]
    res = pd.concat(list1, ignore_index=True)
    print('list dataframe concat use time:%s s.' % (datetime.now() - start))
if 1:
    start = datetime.now()
    a=[]
    b=[]
    for i in range(max_shape):
        a.extend(data['a'])
        b.extend(data['b'])
    res = pd.DataFrame({'a':a,'b':b})
    print('list collection use time:%s s.' % (datetime.now() - start))

运行结果: 

append use time:0:00:49.892728 s.
list dataframe concat use time:0:00:13.914202 s.
list collection use time:0:00:05.631400 s.

结论:

1)dataframe中append方法每次产生一个新对象,比较耗时。

2)pandas的concat函数处理较快,但是在之前需要产生每一个dataframe,需要分配空间,耗时。

3)将dataframe的数据提前封装在list里,而list中append和extend在原对象中直接修改,效率较高。最后通过dataframe创建一次分配一次内存,耗时短。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值