• 【原创】大数据量时生成DataFrame避免使用效率低的append方法


     
     
     
    ★append方法可以很方便地拼接两个DataFrame
    1 df1.append(df2)
    2  
    3 >    A  B
    4 > 1 A1 B1
    5 > 2 A2 B2
    6 > 3 A3 B3
    7 > 4 A4 B4
    ★但数据量大时生成DataFrame,应避免使用append方法
    因为:
           与python列表中的append和extend方法不同的是pandas的append方法不会改变原来的对象,而是创建一个新的对象。当然,这样的话会使效率变低而且会占用更多内存,所以如果你有很多数据需要append,建议使用列表,然后传给DataFrame。
           建议直接用空列表依次装好各列的数据,再统一生成总的dataframe表,如下例所示。
     
     1 import pandas as pd
     2 import numpy as np
     3 from datetime import datetime
     4  
     5  
     6 # 模拟生成较大批次量的数据
     7 df_list = [pd.DataFrame({
     8     'a': [np.random.rand() for _ in range(20000)],
     9     'b': [np.random.rand() for _ in range(20000)]
    10 }) for i in range(800)]
    11  
    12  
    13 # %% 第一种方式(运行时间最长——1分钟,内存占用一般)
    14 start1 = datetime.now()
    15 res1 = pd.DataFrame()
    16 for df in df_list:
    17     res1 = res1.append(df)
    18 print('append耗时:%s秒' % (datetime.now() - start1))
    19  
    20  
    21 # %% 第二种方式(运行时间相对第一种少一些——46秒,但内存接近溢出)
    22 start2 = datetime.now()
    23 dict_list = [df.to_dict() for df in df_list]
    24 combine_dict = {}
    25 i = 0
    26 for dic in dict_list:
    27     length = len(list(dic.values())[0])
    28     for idx in range(length):
    29         combine_dict[i] = {k: dic[k][idx] for k in dic.keys()}
    30         i += 1
    31 res2 = pd.DataFrame.from_dict(combine_dict, 'index')
    32 print('dict合并方式耗时:%s秒' % (datetime.now() - start2))
    33  
    34  
    35 # %% 第三种方式:list装好所有值(运行时间最短——4秒多,内存占用低)
    36 start3 = datetime.now()
    37 columns = ['a', 'b']
    38 a_list = []
    39 b_list = []
    40  
    41 for df in df_list:
    42     a_list.extend(df['a'])
    43     b_list.extend(df['b'])
    44 res3 = pd.DataFrame({'a': a_list, 'b': b_list})
    45 print('list装好所有值方式耗时:%s秒' % (datetime.now() - start3))
  • 相关阅读:
    android隐藏底部虚拟键Navigation Bar实现全屏
    TextView.setTextColor颜色值的理解
    GridLayout自定义数字键盘(两个EditText)
    EditText的一些属性及用法
    比较两个Long对象值
    vue全家桶(vue-cli,vue-router,vue-resource,vuex)-1
    vue-vuex状态管理-1
    vue-router进阶-3-过渡动效
    vue-router进阶-2-路由原信息
    vue-router进阶-1-导航守卫
  • 原文地址:https://www.cnblogs.com/oceanicstar/p/10900332.html
Copyright © 2020-2023  润新知