搜索

查看: 3114|回复: 11

[Python] Pandas.concat连接DataFrame,Series的示例代码

[复制链接]
发表于 2023-5-4 17:23:15 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:23:15 3114 11 看全部
目录
  • pandas.concat的基本用法()
  • 连接方向的指定(垂直/水平):axis
  • 指定连接方法(外部连接/内部连接):join
  • pandas.DataFrame的连接
  • pandas.Series的连接
  • pandas.DataFrame和pandas.Series的连接如何使用pandas.concat()函数连接pandas.DataFrame和pandas.Series。
    将对以下内容进行说明。
  • pandas.concat的基本用法()
  • 指定要连接的对象:objs
  • 连接方向的指定(垂直/水平):axis
  • 指定连接方法(外部连接/内部连接):join
  • pandas.DataFrame的连接
  • pandas.Series的连接
  • pandas.DataFrame和pandas.Series的连接
    使用以下的pandas.DataFrame和pandas.Series为例。
    import pandas as pd
    df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                        'B': ['B1', 'B2', 'B3'],
                        'C': ['C1', 'C2', 'C3']},
                       index=['ONE', 'TWO', 'THREE'])
    print(df1)
    #         A   B   C
    # ONE    A1  B1  C1
    # TWO    A2  B2  C2
    # THREE  A3  B3  C3
    df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                        'D': ['D2', 'D3', 'D4']},
                       index=['TWO', 'THREE', 'FOUR'])
    print(df2)
    #         C   D
    # TWO    C2  D2
    # THREE  C3  D3
    # FOUR   C4  D4
    s1 = pd.Series(['X1', 'X2', 'X3'], index=['ONE', 'TWO', 'THREE'], name='X')
    print(s1)
    # ONE      X1
    # TWO      X2
    # THREE    X3
    # Name: X, dtype: object
    s2 = pd.Series(['Y2', 'Y3', 'Y4'], index=['TWO', 'THREE', 'FOUR'], name='Y')
    print(s2)
    # TWO      Y2
    # THREE    Y3
    # FOUR     Y4
    # Name: Y, dtype: object
    pandas.concat的基本用法()
    指定要连接的对象:objs
    通过参数objs指定要连接的pandas.DataFrame和pandas.Series,指定类型为列表或元组。
    df_concat = pd.concat([df1, df2])
    print(df_concat)
    #          A    B   C    D
    # ONE     A1   B1  C1  NaN
    # TWO     A2   B2  C2  NaN
    # THREE   A3   B3  C3  NaN
    # TWO    NaN  NaN  C2   D2
    # THREE  NaN  NaN  C3   D3
    # FOUR   NaN  NaN  C4   D4
    要连接的对象的数量不限于两个,可以是三个或更多。
    df_concat_multi = pd.concat([df1, df2, df1])
    print(df_concat_multi)
    #          A    B   C    D
    # ONE     A1   B1  C1  NaN
    # TWO     A2   B2  C2  NaN
    # THREE   A3   B3  C3  NaN
    # TWO    NaN  NaN  C2   D2
    # THREE  NaN  NaN  C3   D3
    # FOUR   NaN  NaN  C4   D4
    # ONE     A1   B1  C1  NaN
    # TWO     A2   B2  C2  NaN
    # THREE   A3   B3  C3  NaN
    结果是创建了一个新的对象,原始对象保持不变。

    连接方向的指定(垂直/水平):axis
    垂直或水平方向由axis参数指定。 如果axis = 0,则它们是垂直链接的。默认设置为axis = 0,因此可以省略不写。
    df_v = pd.concat([df1, df2], axis=0)
    print(df_v)
    #          A    B   C    D
    # ONE     A1   B1  C1  NaN
    # TWO     A2   B2  C2  NaN
    # THREE   A3   B3  C3  NaN
    # TWO    NaN  NaN  C2   D2
    # THREE  NaN  NaN  C3   D3
    # FOUR   NaN  NaN  C4   D4
    axis = 1,水平方向上连接。
    df_h = pd.concat([df1, df2], axis=1)
    print(df_h)
    #          A    B    C    C    D
    # ONE     A1   B1   C1  NaN  NaN
    # TWO     A2   B2   C2   C2   D2
    # THREE   A3   B3   C3   C3   D3
    # FOUR   NaN  NaN  NaN   C4   D4

    指定连接方法(外部连接/内部连接):join
    参数join:指定列名(或行名)的并集,或者仅将公共部分保留。
    join ='outer’是外部连接。列名(或行名)形成一个联合,保留所有列(或行)。它是默认设置,因此可以省略不写。在这种情况下,原始对象中列(或行)不存在的值将由的缺少值NaN代替。
    join ='inner’是内部连接。仅保留具有相同列名(或行名)的列(或行)。
    df_v_out = pd.concat([df1, df2], join='outer')
    print(df_v_out)
    #          A    B   C    D
    # ONE     A1   B1  C1  NaN
    # TWO     A2   B2  C2  NaN
    # THREE   A3   B3  C3  NaN
    # TWO    NaN  NaN  C2   D2
    # THREE  NaN  NaN  C3   D3
    # FOUR   NaN  NaN  C4   D4
    df_v_in = pd.concat([df1, df2], join='inner')
    print(df_v_in)
    #         C
    # ONE    C1
    # TWO    C2
    # THREE  C3
    # TWO    C2
    # THREE  C3
    # FOUR   C4
    水平方向。
    df_h_out = pd.concat([df1, df2], axis=1, join='outer')
    print(df_h_out)
    #          A    B    C    C    D
    # FOUR   NaN  NaN  NaN   C4   D4
    # ONE     A1   B1   C1  NaN  NaN
    # THREE   A3   B3   C3   C3   D3
    # TWO     A2   B2   C2   C2   D2
    df_h_in = pd.concat([df1, df2], axis=1, join='inner')
    print(df_h_in)
    #         A   B   C   C   D
    # TWO    A2  B2  C2  C2  D2
    # THREE  A3  B3  C3  C3  D3
    如何更改列名和行名,请参考下列连接。
    01_Pandas.DataFrame的行名和列名的修改

    pandas.DataFrame的连接
    将pandas.DataFrames连接在一起时,返回的也是pandas.DataFrame类型的对象。
    df_concat = pd.concat([df1, df2])
    print(df_concat)
    #          A    B   C    D
    # ONE     A1   B1  C1  NaN
    # TWO     A2   B2  C2  NaN
    # THREE   A3   B3  C3  NaN
    # TWO    NaN  NaN  C2   D2
    # THREE  NaN  NaN  C3   D3
    # FOUR   NaN  NaN  C4   D4
    print(type(df_concat))
    #
    pandas.Series的连接
    如果是pandas.Series之间的连接,则垂直连接(默认值axis= 0)返回的也是pandas.Series类型的对象。
    s_v = pd.concat([s1, s2])
    print(s_v)
    # ONE      X1
    # TWO      X2
    # THREE    X3
    # TWO      Y2
    # THREE    Y3
    # FOUR     Y4
    # dtype: object
    print(type(s_v))
    #
    axis = 1时,水平方向连接,返回pandas.DataFrame类型的对象。
    s_h = pd.concat([s1, s2], axis=1)
    print(s_h)
    #          X    Y
    # FOUR   NaN   Y4
    # ONE     X1  NaN
    # THREE   X3   Y3
    # TWO     X2   Y2
    print(type(s_h))
    #
    也可以使用参数join。
    s_h_in = pd.concat([s1, s2], axis=1, join='inner')
    print(s_h_in)
    #         X   Y
    # TWO    X2  Y2
    # THREE  X3  Y3

    pandas.DataFrame和pandas.Series的连接
    对于pandas.DataFrame和pandas.Series连接,水平连接(axis= 1)将pandas.Series添加为新列。列名称是pandas.Series的名称。
    df_s_h = pd.concat([df1, s2], axis=1)
    print(df_s_h)
    #          A    B    C    Y
    # FOUR   NaN  NaN  NaN   Y4
    # ONE     A1   B1   C1  NaN
    # THREE   A3   B3   C3   Y3
    # TWO     A2   B2   C2   Y2
    也可以使用参数join。
    df_s_h_in = pd.concat([df1, s2], axis=1, join='inner')
    print(df_s_h_in)
    #         A   B   C   Y
    # TWO    A2  B2  C2  Y2
    # THREE  A3  B3  C3  Y3
    垂直连接(axis = 0)。
    df_s_v = pd.concat([df1, s2])
    print(df_s_v)
    #          A    B    C    0
    # ONE     A1   B1   C1  NaN
    # TWO     A2   B2   C2  NaN
    # THREE   A3   B3   C3  NaN
    # TWO    NaN  NaN  NaN   Y2
    # THREE  NaN  NaN  NaN   Y3
    # FOUR   NaN  NaN  NaN   Y4
    添加行,可以在.loc中指定新的行名称并分配值,或使用append()方法。
    df1.loc['FOUR'] = ['A4', 'B4', 'C4']
    print(df1)
    #         A   B   C
    # ONE    A1  B1  C1
    # TWO    A2  B2  C2
    # THREE  A3  B3  C3
    # FOUR   A4  B4  C4
    s = pd.Series(['A5', 'B5', 'C5'], index=df1.columns, name='FIVE')
    print(s)
    # A    A5
    # B    B5
    # C    C5
    # Name: FIVE, dtype: object
    df_append = df1.append(s)
    print(df_append)
    #         A   B   C
    # ONE    A1  B1  C1
    # TWO    A2  B2  C2
    # THREE  A3  B3  C3
    # FOUR   A4  B4  C4
    # FIVE   A5  B5  C5
    到此这篇关于Pandas.concat连接DataFrame,Series的示例代码的文章就介绍到这了,更多相关Pandas concat连接内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 16:33:24 | 显示全部楼层
    贰十岁装成熟装s 2023-6-29 16:33:24 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-29 20:52:29 | 显示全部楼层
    执着等待等wc 2023-6-29 20:52:29 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-30 05:46:15 | 显示全部楼层
    胡37 2023-6-30 05:46:15 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-30 08:39:09 | 显示全部楼层
    123456833 2023-6-30 08:39:09 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 11:29:49 | 显示全部楼层
    Gordon520 2023-6-30 11:29:49 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-30 16:46:01 | 显示全部楼层
    计划你大爷计j 2023-6-30 16:46:01 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-30 20:37:50 | 显示全部楼层
    风来时狂放 2023-6-30 20:37:50 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    发表于 2023-7-3 14:37:12 | 显示全部楼层
    123456848 2023-7-3 14:37:12 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-7-3 16:36:04 | 显示全部楼层
    心随674 2023-7-3 16:36:04 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表