首頁 > 軟體

Python資料分析之 Pandas Dataframe合併和去重操作

2022-05-22 13:00:17

一、之 Pandas Dataframe合併

在資料分析中,避免不了要從多個資料集中取資料,那就避免不了要進行資料的合併,這篇文章就來介紹一下 Dataframe 物件的合併操作。

Pandas 提供了merge()方法來進行合併操作,使用語法如下:

pd.merge(left, right, how="inner", on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=False)

常用的引數說明:

  • left、right:指定左右兩個要進行合併的 DataFrame 物件
  • how:指定合併型別,可以選擇left、right、outer、inner,此引數可以確定以哪邊(左邊、右邊或者左右共有)的鍵為基準,如果出現匹配失敗的用NaN填充,預設為inner,具體如下:
    • left:代表左連線,以左DataFrame為基準,右側匹配失敗的用NaN填充
    • right:代表右連線,以右DataFrame為基準,左側匹配失敗的用NaN填充
    • inner:代表內連線,取交集
    • outer:代表外連線,取並集,匹配失敗的用NaN填充
  • on:指定用於連線的鍵,也就是列名,傳遞改引數的話,必須保證傳遞的“鍵”在左右兩邊的DataFrame中都存在
  • left_on:指定左側DataFrame中用於連線的鍵
  • right_on:指定右側DataFrame中用於連線的鍵
  • left_index & right_index:表示以行索引作為合併基準,預設為False
  • sort:指定是否按照字典順序通過連線鍵對結果DataFrame進行排序,預設為False

例如,對下面兩個 DataFrame 物件執行合併操作:

import pandas as pd
data = {"name": ["Alice", "Bob", "Cindy", "David"], "age": [25, 23, 28, 24], "gender": ["woman", "man", "woman", "man"]}
df1 = pd.DataFrame(data)
df1

data = {"name": ["Alice", "Bob", "Cindy", "Emilie"], "city": ["beijing", "beijing", "jinan", "shanghai"]}
df2 = pd.DataFrame(data)
df2

使用name作為連線鍵:

merge_pd = pd.merge(df1, df2, on="name")
merge_pd

結果輸出如下:

設定為左連線:

merge_pd = pd.merge(df1, df2, on="name", how="left")
merge_pd

結果輸出如下:

在進行資料分析時,資料的質量可能並不理想,有可能包含一些重複資料,那我們就要進行資料的“去重”操作,刪除重複的資料,保留唯一的資料項,從而提高資料集整體的精確度,同時也可以節省空間、提升讀寫效能等,接下來就來介紹一下 Pandas Dataframe 的去重操作。

二、去重操作

Pandas 提供了drop_duplicates()方法進行資料的去重操作,具體使用格式如下:

df.drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)

引數說明如下:

  • subset:指定要進行去重的列名,預設為None,可以使用列表指定一個或多個列名
  • keep:有三個引數可選:first、last、False,預設為first,表示只保留第一次出現的重複項,刪除其餘重複項;last表示只保留最後一次出現的重複項;False表示刪除所有重複項
  • inplace:是否在原Dataframe物件上進行操作
  • ignore_index:預設為False,設定為True可以重新生成行索引。

例如,對下面 DataFrame 物件進行去重操作:

可以看到該DataFrame 物件中索引為1、3的行是重複的,下面進行去除:

保留第一次出現的重複項

df.drop_duplicates(inplace=True)
df

結果輸出如下:

刪除所有重複項

df.drop_duplicates(keep=False, inplace=True)
df

結果輸出如下:

ignore_index引數使用

df.drop_duplicates(inplace=True, ignore_index=True)
df

ignore_index設定為True後,通過結果可以看到,行索引進行了重排。

當然drop_duplicates()方法也可以根據指定列名去重,給subset傳遞引數即可,例如根據name列進行去重:

df.drop_duplicates(subset=["name"], inplace=True)

到此這篇關於Python資料分析之 Pandas Dataframe合併和去重操作的文章就介紹到這了,更多相關Pandas Dataframe合併去重內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com