PythonPandas實現DataFrame合并得圖文教程

    目錄

    一、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)
    參數介紹:
    left,right:要merge得dataframe或者有name得Series
    how:join類型,'left', 'right', 'outer', 'inner'
    on:join得key,left和right都需要有這個key
    left_on:left得df或者series得key
    right_on:right得df或者seires得key
    left_index,right_index:使用index而不是普通得column做join
    suffixes:兩個元素得后綴,如果列有重名,自動添加后綴,默認是('_x', '_y')

    二、以關鍵列來合并兩個dataframe

    可以看到只有left和right得key1=y得行保留了下來,即默認合并后只保留有共同列項并且值相等行(即交集)。

    本例中left和right得k1=y分別有2個,最終構成了2*2=4行

    import pandas as pdleft = pd.DataFrame({'A': ['a0', 'a1', 'a2', 'a3'],                     'B': ['b0', 'b1', 'b2', 'b3'],                     'k1': ['x', 'x', 'y', 'y']})right = pd.DataFrame({'C': ['c1', 'c2', 'c3', 'c4'],                      'D': ['d1', 'd2', 'd3', 'd4'],                      'k1': ['y', 'y', 'z', 'z']})

    left

    left

    right

    pd.merge(left, right, on=‘k1’)

    三、理解merge時數量得對齊關系

    one-to-one:一對一關系,關聯得key都是唯一得
        比如(學號,姓名) merge (學號,年齡)
        結果條數為:1*1
    one-to-many:一對多關系,左邊唯一key,右邊不唯一key
        比如(學號,姓名) merge (學號,[語文成績、數學成績、英語成績])
        結果條數為:1*N
    many-to-many:多對多關系,左邊右邊都不是唯一得
        比如(學號,[語文成績、數學成績、英語成績]) merge (學號,[籃球、足球、乒乓球])
        結果條數為:M*N

    1、one-to-one 一對一關系得merge

    left = pd.DataFrame({'sno': [11, 12, 13, 14],                      'name': ['name_a', 'name_b', 'name_c', 'name_d']                    })right = pd.DataFrame({'sno': [11, 12, 13, 14],                      'age': ['21', '22', '23', '24']                    })

    left

    right

    # 一對一關系,結果中有4條pd.merge(left, right, on='sno')

    2、one-to-many 一對多關系得merge

    注意:數據會被復制

    left = pd.DataFrame({'sno': [11, 12, 13, 14],                      'name': ['name_a', 'name_b', 'name_c', 'name_d']                    })right = pd.DataFrame({'sno': [11, 11, 11, 12, 12, 13],                       'grade': ['語文88', '數學90', '英語75','語文66', '數學55', '英語29']                     })

    left

    right

    # 數目以多得一邊為準pd.merge(left, right, on='sno')

    3、many-to-many 多對多關系得merge

    注意:結果數量會出現乘法

    left = pd.DataFrame({'sno': [11, 11, 12, 12,12],                      '愛好': ['籃球', '羽毛球', '乒乓球', '籃球', "足球"]                    })right = pd.DataFrame({'sno': [11, 11, 11, 12, 12, 13],                       'grade': ['語文88', '數學90', '英語75','語文66', '數學55', '英語29']                     })

    left

    right

    pd.merge(left, right, on=‘sno’)

    四、理解left join、right join、inner join、outer join得區別

    left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],                      'A': ['A0', 'A1', 'A2', 'A3'],                      'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key': ['K0', 'K1', 'K4', 'K5'],                      'C': ['C0', 'C1', 'C4', 'C5'],                      'D': ['D0', 'D1', 'D4', 'D5']})

    left

    right

    1、inner join,默認

    左邊和右邊得key都有,才會出現在結果里

    pd.merge(left, right, how='inner')

    2、left join

    左邊得都會出現在結果里,右邊得如果無法匹配則為Null

    pd.merge(left, right, how='left')

    3、 right join

    右邊得都會出現在結果里,左邊得如果無法匹配則為Null

    pd.merge(left, right, how='right')

    4、 outer join

    左邊、右邊得都會出現在結果里,如果無法匹配則為Null

    pd.merge(left, right, how='outer')

    五、如果出現非Key得字段重名怎么辦

    left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],                      'A': ['A0', 'A1', 'A2', 'A3'],                      'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key': ['K0', 'K1', 'K4', 'K5'],                      'A': ['A10', 'A11', 'A12', 'A13'],                      'D': ['D0', 'D1', 'D4', 'D5']})

    left

    right

    pd.merge(left, right, on='key')

    pd.merge(left, right, on='key', suffixes=('_left', '_right'))

    總結

    到此這篇關于Pandas實現DataFrame合并得內容就介紹到這了,更多相關Pandas DataFrame合并內容請搜索之家以前得內容或繼續瀏覽下面得相關內容希望大家以后多多支持之家!

    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發表評論
    更多 網友評論1 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: AV无码精品一区二区三区| 一区二区三区人妻无码 | 亚洲av乱码一区二区三区按摩| 一区二区三区精品高清视频免费在线播放 | 精品91一区二区三区| 波多野结衣一区在线| 亚洲AV无码一区二区乱孑伦AS | 精品一区二区三区在线观看视频| 在线电影一区二区| 亚洲香蕉久久一区二区三区四区 | 亚洲欧美日韩中文字幕一区二区三区 | 亚洲第一区香蕉_国产a| 亚洲av片一区二区三区| 日韩精品一区二区三区中文版| 日韩精品一区二区三区老鸭窝| 国产午夜精品免费一区二区三区 | 99久久精品日本一区二区免费 | 风间由美在线亚洲一区| 88国产精品视频一区二区三区| 国产福利电影一区二区三区久久久久成人精品综合 | 久久综合一区二区无码| 亚洲美女高清一区二区三区| 国产精品538一区二区在线| 无码人妻一区二区三区免费| 在线日产精品一区| 亚洲性无码一区二区三区| 伊人久久大香线蕉AV一区二区| 亚洲天堂一区在线| 交换国产精品视频一区| 精品人妻一区二区三区浪潮在线| 日韩人妻不卡一区二区三区| 乱子伦一区二区三区| 亚洲熟妇AV一区二区三区宅男| 一区二区三区在线观看| 日韩视频一区二区在线观看| 福利电影一区二区| 中文字幕Av一区乱码| 国产成人精品视频一区二区不卡| 久久久99精品一区二区| 日本高清不卡一区| 一本大道在线无码一区|