ホームページ  >  記事  >  バックエンド開発  >  Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

王林
王林転載
2023-05-07 21:04:173393ブラウズ

    merge()

    1. 従来のマージ

    ①方法1

    参照カラムを指定し、この列に基づいて、他の列をマージします。

    import pandas as pd
    
    df1 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num1': [120, 101, 104],
                        'num2': [110, 102, 121],
                        'num3': [105, 120, 113]})
    df2 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num4': [80, 86, 79]})
    print(df1)
    print("=======================================")
    print(df2)
    print("=======================================")
    df_merge = pd.merge(df1, df2, on='id')
    print(df_merge)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    ②方法 2

    このマージを実現するには、インデックスを使用して、つまりインデックス列に基づいてマージすることもできます。 left_index と right_index の両方を True
    に設定するだけです。 (left_index と right_index の両方のデフォルトは False です。left_index は、左側のテーブルが左側のテーブル データのインデックスに基づいていることを意味し、right_index は、右側のテーブルが右側のテーブル データのインデックスに基づいていることを意味します。)

    import pandas as pd
    
    df1 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num1': [120, 101, 104],
                        'num2': [110, 102, 121],
                        'num3': [105, 120, 113]})
    df2 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num4': [80, 86, 79]})
    print(df1)
    print("=======================================")
    print(df2)
    print("=======================================")
    
    df_merge = pd.merge(df1, df2, left_index=True, right_index=True)
    print(df_merge)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    方法①と比較すると、図に示すように、方法②でマージされたデータには重複する列が存在することが異なります。

    重要なパラメータ

    pd.merge(right,how=‘inner’, on=“なし”, left_on=“なし”, right_on=“なし”, left_index= False、right_index=False )

    onベース列の列名left_on左テーブルのベース列の列名right_on右のテーブルのベース列の列名left_index左の列がインデックスに基づいているかどうか、デフォルトis False、noright_index正しい列がインデックスに基づいているかどうか、デフォルトは False、noこのうち、left_index と right_index は on と同時に指定できません。
    パラメータ 説明
    left 左のテーブル、マージされたオブジェクト、DataFrame または Series
    right 右のテーブル、マージされたオブジェクト、DataFrame または Series
    方法 マージ方法には、左 (左マージ)、右 (右マージ)、外側 (外側マージ)、内側 (内側マージ) があります。

    マージ メソッド left right external inner

    データの準備‘

    新しいデータ セットの準備:

    import pandas as pd
    
    df1 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num1': [120, 101, 104],
                        'num2': [110, 102, 121],
                        'num3': [105, 120, 113]})
    df2 = pd.DataFrame({'id': ['001', '004', '003'],
                        'num4': [80, 86, 79]})
    print(df1)
    print("=======================================")
    print(df2)
    print("=======================================")

    #inner (デフォルト) Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    両方のデータセットのキーの共通部分を使用します

    df_merge = pd.merge(df1, df2, on='id')
    print(df_merge)

    outerPython で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    両方のデータセットのキーの結合を使用する

    df_merge = pd.merge(df1, df2, on='id', how="outer")
    print(df_merge)

    left

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?左のデータ セットのキーを使用

    df_merge = pd.merge(df1, df2, on='id', how='left')
    print(df_merge)

    right

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?右のデータ セットのキーを使用

    df_merge = pd.merge(df1, df2, on='id', how='right')
    print(df_merge)

    2. 多対 1 のマージ

    import pandas as pd
    
    df1 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num1': [120, 101, 104],
                        'num2': [110, 102, 121],
                        'num3': [105, 120, 113]})
    df2 = pd.DataFrame({'id': ['001', '001', '003'],
                        'num4': [80, 86, 79]})
    print(df1)
    print("=======================================")
    print(df2)
    print("=======================================")
    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    図に示すように、df2 には重複した id1 データがあります。

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?Merge

    df_merge = pd.merge(df1, df2, on='id')
    print(df_merge)

    マージされた結果は次の図に示すとおりです。

    データを使用するデフォルトの Inner メソッドに従います。 2 つのデータセットからのキーの共通部分。また、重複キーを持つ行はマージ結果に複数の行として反映されます。

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?3. 多対多のマージ

    たとえば、グラフ 1 と表 2 の両方に、重複する ID を持つ複数の行があります。

    import pandas as pd
    df1 = pd.DataFrame({'id': ['001', '002', '002', '002', '003'],
                        'num1': [120, 101, 104, 114, 123],
                        'num2': [110, 102, 121, 113, 126],
                        'num3': [105, 120, 113, 124, 128]})
    df2 = pd.DataFrame({'id': ['001', '001', '002', '003', '001'],
                        'num4': [80, 86, 79, 88, 93]})
    print(df1)
    print("=======================================")
    print(df2)
    print("=======================================")

    df_merge = pd.merge(df1, df2, on='id')
    print(df_merge)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    concat()

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    pd.concat(objs, axis=0, join= ‘outer’、ignore_index:bool=False、keys=None、levels=None、names=None、verify_integrity:bool=False、sort:bool=False、copy:bool=True)

    パラメータ説明objsシリーズ、データフレーム、またはパネルのシーケンスオブジェクトまたはマッピング デフォルトは 0 で、列を示します。 1 の場合は行を意味します。 デフォルトは「outer」ですが、「inner」にすることもできます デフォルトは False で、インデックスが保持される (無視されない) ことを意味します。インデックスを無視するには、True に設定します。
    axis
    #join
    ignore_index

    其他重要参数通过实例说明。

    1.相同字段的表首位相连

    首先准备三组DataFrame数据:

    import pandas as pd
    df1 = pd.DataFrame({'id': ['001', '002', '003'],
                        'num1': [120, 114, 123],
                        'num2': [110, 102, 121],
                        'num3': [113, 124, 128]})
    df2 = pd.DataFrame({'id': ['004', '005'],
                        'num1': [120, 101],
                        'num2': [113, 126],
                        'num3': [105, 128]})
    df3 = pd.DataFrame({'id': ['007', '008', '009'],
                        'num1': [120, 101, 125],
                        'num2': [113, 126, 163],
                        'num3': [105, 128, 114]})
    
    
    print(df1)
    print("=======================================")
    print(df2)
    print("=======================================")
    print(df3)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    合并

    dfs = [df1, df2, df3]
    result = pd.concat(dfs)
    print(result)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    如果想要在合并后,标记一下数据都来自于哪张表或者数据的某类别,则也可以给concat加上 参数keys

    result = pd.concat(dfs, keys=['table1', 'table2', 'table3'])
    print(result)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    此时,添加的keys与原来的index组成元组,共同成为新的index。

    print(result.index)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    2.横向表合并(行对齐)

    准备两组DataFrame数据:

    import pandas as pd
    df1 = pd.DataFrame({'num1': [120, 114, 123],
                        'num2': [110, 102, 121],
                        'num3': [113, 124, 128]}, index=['001', '002', '003'])
    df2 = pd.DataFrame({'num3': [117, 120, 101, 126],
                        'num5': [113, 125, 126, 133],
                        'num6': [105, 130, 128, 128]}, index=['002', '003', '004', '005'])
    
    print(df1)
    print("=======================================")
    print(df2)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    当axis为默认值0时:

    result = pd.concat([df1, df2])
    print(result)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    横向合并需要将axis设置为1

    result = pd.concat([df1, df2], axis=1)
    print(result)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    对比以上输出差异。

    • axis=0时,即默认纵向合并时,如果出现重复的行,则会同时体现在结果中

    • axis=1时,即横向合并时,如果出现重复的列,则会同时体现在结果中。

    3.交叉合并

    result = pd.concat([df1, df2], axis=1, join='inner')
    print(result)

    Python で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?

    以上がPython で DataFrame を使用してデータをマージおよび結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。