★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))