1. 程式人生 > 其它 >Pandas:資料合併與對比

Pandas:資料合併與對比

1、資料追加df.append()

  df.append(self, other, ignore_index=False,
            verify_integrity=False, sort=False)

其中:

  • other 是它要追加的其他 DataFrame 或者類似序列內容
  • ignore_index 如果為 True 則重新進行自然索引
  • verify_integrity 如果為 True 則遇到重複索引內容時報錯
  • sort 進行排序

  import pandas as pd 

  df1 = pd.DataFrame({'a':[1,2],'b':[3,4]})
  df2 = pd.DataFrame({'a':[5,6],'b':[7,8]})
  df1.append(df2)



2、資料連線pd.concat()

Pandas 資料的連線可以實現縱向和橫向連線,將資料連線後會形成一個新的物件, Series 或 DataFrame。連線是最常用的多個數據合併操作。

pd.concat() 是專門用於資料連接合並的函式,它可以沿著行或者列進行操作,同時可以指定非合併軸的合併方式(合集、交集等)。


3、資料合併pd.merge()

  pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
           left_index=False, right_index=False, sort=True,
           suffixes=('_x', '_y'), copy=True, indicator=False,
           validate=None)
  • how:連線方式,預設為inner,可設為inner/outer/left/right
  • on:根據某個欄位進行連線,必須存在於兩個DateFrame中(若未同時存在,則需要分別使用left_on 和 right_on 來設定)
  • left_on:左連線,以DataFrame1中用作連線鍵的列
  • right_on:右連線,以DataFrame2中用作連線鍵的列
  • left_index:bool, default False,將DataFrame1行索引用作連線鍵
  • right_index:bool, default False,將DataFrame2行索引用作連線鍵
  • sort:根據連線鍵對合並後的資料進行排列,預設為True
  • suffixes:對兩個資料集中出現的重複列,新資料集中加上字尾 _x, _y 進行區別



4、按元素合併

在資料合併過程中需要對應位置的數值進行計算,比如相加、平均,對空值補齊等,Pandas 提供了 df.combine_first() 和 df. combine() 等方法進行這些操作。

  df1 = pd.DataFrame({'A': [None, 0], 'B': [None, 4]})
  df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
  #使用相同位置的值更新空元素,它只能是 df1 有空元素時才能被替換,如果資料結構不一致,所得 DataFram e的行索引和列索引將是兩者的並集。
  df1.combine_first(df2)
  #df. combine()
  #可以與另一個 DataFrame 進行按列組合。使用函式將一個 DataFrame 與其他DataFrame合併,以逐元素合併列。 所得 DataFrame 的行索引和列索引將是兩者的並集。

  df1 = pd.DataFrame({'A': [0, 0], 'B': [4, 4]})
  df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
  # s1 列總和如果小於 s2列總和取 s1, 否則取 s2
  take_smaller = lambda s1, s2: s1 if s1.sum() < s2.sum() else s2
  df1.combine(df2, take_smaller)
  #df.update()
  #使用來自另一個 DataFrame 的非NA值進行修改,原 df 為被更新。

  df = pd.DataFrame({'A': [1, 2, 3],
                     'B': [400, 500, 600]})
  new_df = pd.DataFrame({'B': [4, 5, 6],
                         'C': [7, 8, 9]})
  df.update(new_df)
  df

5、資料對比

  pd.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
  • other:被對比的資料
  • align_axis=1:差異堆疊在列/行上
  • keep_shape=False:不保留相等的值
  • keep_equal=False:不保留所有原始行和列