1. 程式人生 > >Pandas DataFrame merge join concat append combin_first 使用demo

Pandas DataFrame merge join concat append combin_first 使用demo

merge 合併

  • pandas.merge可根據一個或多個鍵將不同DataFrame中的行合併起來
  • 複製程式碼
    # 在未指定連線鍵的情況下,merge會將重疊列的列名當做鍵
    pd.merge(left, right)
    
    # 指定“on”作為連線鍵,left和right兩個DataFrame必須同時存在“on”列,連線鍵也可N對N(少用)
    pd.merge(left, right, on="key")
    pd.merge(left, right, on=["key1", "key2"])
    
    # 指定left的連線鍵為“lkey”,right的連線鍵為“rkey”
    pd.merge(left,  right,  left_on="lkey",  right="rkey")
    
    # suffixes:用於追加到重疊列名的末尾,預設為("_x", "_y")
    pd.merge(left,  right,  on="key",  suffixes=("_left",  "_right"))
    
    # 指定連線方式:“inner”(預設),“left”,“right”,“outer”
    pd.merge(left, right, how="outer")
    複製程式碼
  • 多對多連線產生的是行的笛卡爾積
  • 常用方式:連線方式為“left”,right的連線鍵要唯一(去除重複值),通過right的資料補全left的資料

   索引上的合併(可用join代替,而且join更方便)

  • 當DataFrame的連線鍵位於其索引中,可以使用 left_index=True 和 right_index=True
  • 複製程式碼
    # 索引和索引連線
    pd.merge(left,  right,  left_index=True,  right_index=True)
    
    # "key"和索引連線
    pd.merge(left,  right,  left_on="key",  right_index=True)
    
    # 層次化索引
    pd.merge(left,  right,  left_on=["key1", "key2"],  right_index=True)
    複製程式碼

     

join 連線

  • DataFrame的join例項方法,是為了方便實現索引合併
  • 複製程式碼
    # 用left的索引和right的索引進行merge
    left.join(right)
    
    # 用left的索引和right的“key”進行merge
    left.join(right, on="key")
    
    # 層次化索引
    left.join(right, on=["key1", "key"])
    
    # join可以合併兩張以上的表,而merge只能合併兩張表
    left.join([right1, right2], how="outer")
    複製程式碼

     

concat  軸向連線

  • pandas.concat可以沿著一條軸將多個表物件堆疊到一起:因為模式how模式是“outer”
  • 複製程式碼
    # 預設 axis=0 上下拼接,列column重複的會自動合併
    pd.concat([df1, df2], axis=0)
    
    # axis=1 左右拼接,行raw/index重複的會自動合併
    pd.concat([df1, df2], axis=1)
    
    # 忽略df1和df2原來的index,重新給新的DataFrame設定從0開始的index
    pd.concat([df1,df2],  ignore_index=True)
    複製程式碼

     

append

  • 使用場景:表頭一致的多張表,進行連線(上下連線)
    df1.append(df2).append(df3)

     

combin_first 資料填補

  • 使用場景:有兩張表left和right,一般要求它們的表格結構一致,資料量也一致,使用right的資料去填補left的資料缺漏
  • 如果在同一位置left與right資料不一致,保留left的資料
    df1.combin_first(df2)