02_Pandas.concat连接DataFrame,Series

02_Pandas.concat连接DataFrame,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))
# <class 'pandas.core.frame.DataFrame'>

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))
# <class 'pandas.core.series.Series'>

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))
# <class 'pandas.core.frame.DataFrame'>

也可以使用参数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
### 回答1: pandas.concat 是一个函数,用于将多个 Pandas 数据框(DataFrame)或者 Pandas 系列(Series)按照指定的轴进行连接。它可以按照行或者列方向进行连接,具体实现方式取决于指定的轴参数。 语法如下: ``` pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True) ``` 参数说明: - objs: 一个列表或者字典,里面包含了要连接Pandas 数据框或者 Pandas 系列。 - axis: 指定要连接的轴,0 表示按照行方向连接,1 表示按照列方向连接,默认为 0。 - join: 指定连接方式,可以是 'inner' 或者 'outer',默认为 'outer'。 - ignore_index: 如果为 True,则忽略原来数据框中的索引,重新生成一个新的索引。 - keys: 在连接多个数据框的时候,可以使用 keys 参数来指定每个数据框的标签,这样连接之后的数据框就会使用 MultiIndex 来表示。 - levels: 如果使用 keys 参数指定了标签,那么可以使用 levels 参数来指定每个标签的层级结构。 - names: 如果使用 keys 参数指定了标签,那么可以使用 names 参数来指定每个层级的名称。 - verify_integrity: 如果为 True,则在连接之前检查数据框中是否有重复的索引,如果有则抛出 ValueError 异常。 - sort: 如果为 True,则在连接之后对结果进行排序,默认为 False。 - copy: 如果为 True,则返回连接之后的新对象,否则返回原对象的视图。 示例: ``` import pandas as pd # 创建两个数据框 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [4, 5, 6], 'B': [7, 8, 9]}) # 将两个数据框按照行方向连接 result = pd.concat([df1, df2], axis=0) print(result) ``` 输出: ``` A B 0 1 4 1 2 5 2 3 6 0 4 7 1 5 8 2 6 9 ``` ### 回答2: pandas.concat是一个用于在pandas库中合并数据的函数。它可以水平或垂直地连接不同的数据集,产生一个新的数据集。 pandas.concat函数可以接受多个数据集作为参数,并根据指定的轴进行连接。默认情况下,它会在轴0上进行连接,即垂直连接,将数据集按顺序堆叠起来。例如,如果我们有两个数据集df1和df2,通过pandas.concat([df1, df2])就可以将它们垂直连接起来。 此外,我们还可以通过指定axis参数来进行水平连接。当axis=1时,pandas.concat会将数据集在水平方向上连接起来。这意味着我们可以根据列名在水平方向上合并数据集,产生新的列。需要注意的是,进行水平连接时,数据集必须有相同的行索引,否则连接将会失败。 在进行连接时,pandas.concat还有其他一些重要的参数。其中,join用于指定连接的方式,默认为'outer',表示采用外连接,即保留所有行和列。如果选择'inner',则只保留两个数据集交集部分的行和列。另外,我们还可以通过keys参数为连接之后的数据集添加层次化索引。 总之,pandas.concat是一个非常有用的函数,可以将多个数据集合并成一个新的数据集,扩展数据分析的能力。无论是垂直连接还是水平连接,我们都可以根据实际需求选择适当的参数和方法。 ### 回答3: pandas.concat是一个在pandas库中用于合并/连接数据的函数。它可以将多个数据集按照指定的轴方向进行连接,产生一个新的数据集。 pandas.concat函数的常见用法是将具有相同结构的数据集进行拼接。例如,我们可以使用concat函数将两个具有相同列名的DataFrame对象连接成一个新的DataFrame对象。连接时可以指定连接的轴方向,默认为0,即按行进行拼接。我们还可以通过设置axis参数来指定为1,表示按列进行连接。 除了连接具有相同结构的数据集外,pandas.concat函数还可以用于连接具有不同结构的数据集。在这种情况下,我们可以使用join参数来指定连接方式,有inner、outer、left和right四种连接方式可供选择。默认情况下,join为outer,表示使用外连接的方式进行连接。 此外,pandas.concat函数还可以通过设置keys参数来为合并后的数据集增加层次化索引。如果我们传递一个列表给keys参数,合并后的数据集将具有多个层次的索引,其中每个层次对应一个列表中的元素。 总之,pandas.concat函数是一个非常灵活和强大的工具,它能够方便地处理数据集的合并和连接操作,提供了多种参数和选项来满足不同的需求。使用这个函数可以轻松地将多个数据集合并成一个,为数据处理和分析提供了很大的便利性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值