首页 > 其他分享 >大数据量时生成DataFrame避免使用效率低的append方法

大数据量时生成DataFrame避免使用效率低的append方法

时间:2023-07-27 20:11:06浏览次数:38  
标签:df list DataFrame datetime dict 数据量 append


转载请注明出处:https://www.cnblogs.com/oceanicstar/p/10900332.html 

append方法可以很方便地拼接两个DataFrame

df1.append(df2)

>    A  B
> 1 A1 B1
> 2 A2 B2
> 3 A3 B3
> 4 A4 B4

但数据量大时生成DataFrame,应避免使用append方法

因为:        与python列表中的append和extend方法不同的是pandas的append方法不会改变原来的对象,而是创建一个新的对象。当然,这样的话会使效率变低而且会占用更多内存,所以如果你有很多数据需要append,建议使用列表,然后传给DataFrame。        建议直接用空列表依次装好各列的数据,再统一生成总的dataframe表,如下例所示。
import pandas as pd
import numpy as np
from datetime import datetime


# 模拟生成较大批次量的数据
df_list = [pd.DataFrame({
    'a': [np.random.rand() for _ in range(20000)],
    'b': [np.random.rand() for _ in range(20000)]
}) for i in range(800)]


# %% 第一种方式(运行时间最长——1分钟,内存占用一般)
start1 = datetime.now()
res1 = pd.DataFrame()
for df in df_list:
    res1 = res1.append(df)
print('append耗时:%s秒' % (datetime.now() - start1))


# %% 第二种方式(运行时间相对第一种少一些——46秒,但内存接近溢出)
start2 = datetime.now()
dict_list = [df.to_dict() for df in df_list]
combine_dict = {}
i = 0
for dic in dict_list:
    length = len(list(dic.values())[0])
    for idx in range(length):
        combine_dict[i] = {k: dic[k][idx] for k in dic.keys()}
        i += 1
res2 = pd.DataFrame.from_dict(combine_dict, 'index')
print('dict合并方式耗时:%s秒' % (datetime.now() - start2))


# %% 第三种方式:list装好所有值(运行时间最短——4秒多,内存占用低)
start3 = datetime.now()
columns = ['a', 'b']
a_list = []
b_list = []

for df in df_list:
    a_list.extend(df['a'])
    b_list.extend(df['b'])
res3 = pd.DataFrame({'a': a_list, 'b': b_list})
print('list装好所有值方式耗时:%s秒' % (datetime.now() - start3))

 

 

标签:df,list,DataFrame,datetime,dict,数据量,append
From: https://www.cnblogs.com/scarecrow-blog/p/17585907.html

相关文章

  • Pandas学习笔记之Dataframe
    一、Dataframe基本概念#二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。data={'name':['Jack','Tom','Mary'],'age':[18,19,20],'gender':['m','m&#......
  • DataFrame随机选行+纵向拼接
    Dataframe随机选行(1)dataframe实例:city_data={'city':['beijing','shanghai','xining','dalian','xian','chongqing'],'location':['north','south&#......
  • DataFrame筛选多行和多列
    Dataframe筛选多行在实际数据筛选的时候,有时候需要选择多行,例如,有一个列表数据,需要在Dataframe里筛选,某列中在列表数据中的行。在这种情况下可以使用isin语法。具体如下:obj_df=df[df['obj_col'].isin(obj_list)]#筛选的行non_obj_df=df[~df['obj_col'].isin(obj_list)]......
  • spark2.4 dataframe 分组聚合window
    Spark2.4DataFrame分组聚合和窗口函数简介ApacheSpark是一个强大的分布式计算框架,可以用于处理大规模的数据。Spark提供了多种操作数据的方式,其中DataFrame是一种基于分布式数据集的API,它提供了一种高级的数据操作接口,可以方便地对大规模数据进行分组聚合和窗口函数的处理。......
  • python当中append方法调用哪个库
    Python中append方法调用的库是List在Python中,List是一种常用的数据结构,用于存储一组有序的元素。List对象提供了一系列方法来操作列表,其中包括append方法。append方法用于向列表的末尾添加一个元素。使用append方法添加元素下面是一个简单的示例,演示如何使用append方法向列表中......
  • myBatis 流式查询,大数据量查询
    myBatis-plus/myBatis流式查询,大数据量查询myBatis这个开源框架的好处就不再赘述,myBatis-plus则更是myBatis的增强工具,框架给我提供很多查询数据方式,非常方便,这里就介绍一下流式查询,也就是游标的方式去查询。我们在完成工作的途中会遇到大数据量的查询,比如大量数据的导出等等......
  • 【864】pandas dataframe根据规则批量赋值
    ref:Pandas新增一列并按条件赋值?把下图中的NaN都赋值为0df.loc[条件判断,'value']=0m=pd.merge(gdf_africa,df_af_mp,how='left',on='country')m.loc[m['value'].isna(),'value']=0m ......
  • 关于oracle大数据量表添加字段问题
    在工作中有一个情况需要向一个数据量很大的表中新加两个字段,而在整理出当前字段的插入sql时,添加了默认值为0.‘altertableuser_infomodifyid_cardnumber(20)defalut'0';而这个sql却只需要零点几秒甚至更少。结果:在业务需要进行的时候对于这种大数据量的表一定要避免加def......
  • [LeetCode] 2486. Append Characters to String to Make Subsequence
    Youaregiventwostrings s and t consistingofonlylowercaseEnglishletters.Return theminimumnumberofcharactersthatneedtobeappendedtotheendof s sothat t becomesa subsequence of s.A subsequence isastringthatcanbederived......
  • Python3 Pandas DataFrame 对某一列求和
    在操作pandas的DataFrame的时候,常常会遇到某些列是字符串,某一些列是数值的情况,如果直接使用df_obj.apply(sum)往往会出错使用如下方式即可对其中某一列进行求和dataf_test1['diff'].sum()//diff为要求和的列......