Python优化-关于在大数据的情况下提高Python的执行效率

一、关于数据拼接

1、append和concat

pandas.concat()和pandas.append()通常用来连接DataFrame对象,默认情况下是对两个DataFrame对象进行纵向连接。

pandas.concat(objs, axis=0, join='outer', ignore_index=False, 
					keys=None, levels=None, names=None, 
					verify_integrity=False, sort=False, copy=True)

df.append(self, other, ignore_index=False,
               verify_integrity=False, sort=None)

但当在for循环中,在数据量小的时候使用pd.concat()或者pd.append(),程序的执行效率不会受到任何影响,但在大量数据的情况下,仅使用pd.concat()或者pd.append()连接dataframe时,发现随着循环的进行,运行速度越来越慢。
比如:

import pandas as pd
data=pd.read_csv("file.csv")
gp=data.groupby(['user_id'])
NewList=[]
NewDataFrame=pd.DataFrame()
for x,y in gp:
    NewDataFrame=NewDataFrame.append(y)

因为与python列表中的append和extend方法不同的是,pandas的append方法和concat方法,不会改变原来的对象,而是创建一个新的对象,这样的话会使效率变低而且会占用更多内存。

2、利用list结合DataFrame优化

所以如果你有很多数据需要append,建议先使用列表,然后传给DataFrame。

import pandas as pd
data=pd.read_csv("file.csv")
gp=data.groupby(['user_id'])
NewList=[]
NewDataFrame=pd.DataFrame()
for x,y in gp:
    NewList.append(y)
NewDataFrame=NewDataFrame.append(NewList)

二、关于遍历

1、直接遍历

	for macid in macids:
		data_macid = df[df['mac_id'] == macid ]

采用该种遍历方式,算法的时间复杂度是 n 2 n^{2} n2,在大数据的情况下,最终的遍历时间直接会平方加倍。

2、利用dict优化

通过先采用时间复杂度为 n n n的遍历,按照每个macid将数据写入字典中,然后通过字典时间复杂度为 1 1 1的遍历,遍历字典中的数据,将整个算法的时间复杂度降为 n n n

mac_dict = {}
for record in df.iterrows():
	mac = record["mac_id"]
	if mac not in mac_dict:
		mac_dict[mac] = []
	mac_dict[mac].append(record)

for macid, data in mac_dict.items():
	data_macid = pd.DataFrame(data)

采用该种遍历方式,算法的时间复杂度是 n n n,在大数据的情况下,会节省大量的遍历时间。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值