Python - 精进 - DataFrame和Series赋值的性能

DataFrame和Series赋值的性能

结论

DataFrame最好直接进行重构赋值新变量,而不做修改删除等操作。因为两者量级一旦起来存在极大时间差异。

背景

工作场景中,生产环境的linux系统 与 本地windows对比,发现有时间方面差异。本身0.3s能在windows匹配出来的数据,在linux中却1s匹配。

那么,在生产环境的服务器性能优于自己电脑,却产生这样子情况,故进行问题查找。

时间装饰器

首先排查问题是需要找到每一个函数所使用的时间,但是每次都写

import time

start = time.time()
df(xxx)
print("耗费时间是:{}".format(time.time()-start))

会十分浪费空间大小,所以可以用装饰器解决。

# 装饰器
def ctime(func):
    def warpper(*arsg, **kwargs):
        start_time = time.time()
        res = func(*arsg, **kwargs)
        end_time = time.time()
        print("%s cost %ss" % (func.__name__, end_time - start_time))
        return res

    return warpper

用法是

import time

@ctime
df(xxx)

查找时间分布

1、找到耗时函数

利用装饰器找到一个函数的耗时,两者差异较大,如果在linux耗时0.4s,在windows只需0.03s-0.10s(pycharm有编译器,用pycharm 0.03s,但是python xxx.py时却0.10s)

2、分析哪一步耗时慢

image-20200724141548533

函数内部使用的就是一个个表达式,无法使用装饰器,那么只能够

start = time.time()
df_tmp['num_get'] = df_tmp.apply(lambda x: self.interval_treat(str(x['info_match'])), axis=1)
print('1-------{}'.format(time.time()-start))
df_tmp['num_one'], df_tmp['num_two'] = df_tmp['num_get'].str.split('plus').str
print('2-------{}'.format(time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值