Python pandas DataFrame數據拼接方法
前言
在pandas模塊中,通常我們都需要對類型為DataFrame的數據進行操作,其中最為常見的操作便是拼接瞭。比如我們將兩個Excel表格中的數據讀入,隨後拼接完成後保存進一個新的Excel表格文件中。之前查找瞭相關的博客, 發現網絡上魚龍混雜。有些代碼完全無法執行,為瞭提高效率,這裡做一個詳細地記錄。
DataFrame數據拼接方法一:使用.append()方法。
# -*- coding:utf-8 -*- import pandas as pd df1 = pd.DataFrame([[1, 2], [3, 4]]) df2 = pd.DataFrame([[5, 6], [7, 8]]) df = df1.append(df2) print("df1的值為:") print(df1) print("df2的值為:") print(df2) print("df的值為:") print(df) """ 運行結果: df1的值為: 0 1 0 1 2 1 3 4 df2的值為: 0 1 0 5 6 1 7 8 df的值為: 0 1 0 1 2 1 3 4 0 5 6 1 7 8 """
我們可以看到,首先我們使用瞭類似於list列表的操作方式,使用.append()方法對df1與df2數據進行瞭操作,但是需要註意的是,不同於對列表對象的操作,這裡的df1仍舊為原來的df1所擁有的內容,而我們賦值的對象df才是保存瞭二者拼接以後的結果。 所以記得一定要單獨執行賦值才可以得到正確的結果!!!其次我們看到結果其實是有些問題的,df結果中的縱向索引值為0,1,0,1,仍舊保留瞭我們拼接前各自的索引值,這是不被我們需要的,因此我們需要設置 ignore_index=True來對索引值進行重新排列。代碼如下:
# -*- coding:utf-8 -*- import pandas as pd df1 = pd.DataFrame([[1, 2], [3, 4]]) df2 = pd.DataFrame([[5, 6], [7, 8]]) df = df1.append(df2, ignore_index=True) print("df1的值為:") print(df1) print("df2的值為:") print(df2) print("df的值為:") print(df) """ 運行結果: df1的值為: 0 1 0 1 2 1 3 4 df2的值為: 0 1 0 5 6 1 7 8 df的值為: 0 1 0 1 2 1 3 4 2 5 6 3 7 8 """
我們可以看到,此時的縱向索引值變正常瞭。
註意: df1 = pd.DataFrame([[1, 2], [3, 4]])
創建DataFrame類型的數據時要使用雙層中括號,單層中括號會導致數據縱向排列。
DataFrame數據拼接方法二:使用.concat()方法。
# -*- coding:utf-8 -*- import pandas as pd df1 = pd.DataFrame([[1, 2], [3, 4]]) df2 = pd.DataFrame([[5, 6], [7, 8]]) df = pd.concat([df1, df2], ignore_index=True) print("df1的值為:") print(df1) print("df2的值為:") print(df2) print("df的值為:") print(df) """ 運行結果: df1的值為: 0 1 0 1 2 1 3 4 df2的值為: 0 1 0 5 6 1 7 8 df的值為: 0 1 0 1 2 1 3 4 2 5 6 3 7 8 """
我們可以看到成功實現瞭拼接。
但是這樣並不美觀,我們發現,我們的縱向index還是用0,1在表示,那麼我們可不可以自定義縱向index呢?答案是可以的,請看如下代碼:
import pandas as pd df1 = pd.DataFrame([[1, 2], [3, 4]], columns=["column1", "column2"]) df2 = pd.DataFrame([[5, 6], [7, 8]], columns=["column1", "column2"]) df = pd.concat([df1, df2], ignore_index=True) print("df1的值為:") print(df1) print("df2的值為:") print(df2) print("df的值為:") print(df) """ 運行結果: df1的值為: column1 column2 0 1 2 1 3 4 df2的值為: column1 column2 0 5 6 1 7 8 df的值為: column1 column2 0 1 2 1 3 4 2 5 6 3 7 8 """
至此,DataFrame的拼接問題暫時告一段落,當然還存在其他方法,以後有機會瞭再補充,這兩種方法均為比較直觀和簡潔的方法。推薦使用。此外, pd.concat()函數也適用於多個DataFrame的拼接, 隻要將第一個參數變為一個列表,涵蓋所有的DataFrame名稱即可,如[df1, df2, df3]。
補充:Python同時合並多個DataFrame
pandas的merge函數隻能同時合並三個dataframe,如果涉及到合並多個dataframe就比較麻煩
這種情況下我們可以創建一個我們需要合並的列表,然後將他們一次性合並在一起
# merge any number of dataframes from functools import reduce df_groups = [df2, group1, group2, group3, group4, group5, group6, group7, group8] df_merged = reduce(lambda left, right: pd.merge(left, right, on=['title']), df_groups) df_merged.head()
總結
到此這篇關於Python pandas DataFrame數據拼接的文章就介紹到這瞭,更多相關pandas DataFrame拼接內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 關於python DataFrame的合並方法總結
- python pandas數據處理教程之合並與拼接
- pandas中DataFrame數據合並連接(merge、join、concat)
- Pandas實現Dataframe的合並
- python進行數據合並concat/merge