Pandas concat 函数

Suraj Joshi 2023年1月30日
  1. pandas.concat() 语法
  2. 示例:使用 pandas.concat() 方法沿行轴连接 2 个 Pandas Series
  3. 示例:使用 pandas.concat() 方法沿列轴连接 2 个 Pandas 系列对象
  4. 示例:使用 pandas.concat() 方法连接 2 个 Pandas DataFrame 对象
  5. 示例:使用 pandas.concat() 方法将 DataFrame 与一个系列对象进行连接
Pandas concat 函数

pandas.concat() 方法可以连接 Pandas DataFrame 或 Series 对象。

pandas.concat() 语法

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 Series 或 DataFrame 对象的序列或映射。
join 连接方法(innerouter)
axis 沿着行(axis=0)或列(axis=1)进行连接
ignore_index 布尔型。如果为 True,则忽略原 DataFrames 的索引。
keys 向结果索引添加标识符的顺序
levels 用于创建 MultiIndex 的级别
names 多重索引中的级别名称
verify_integrity 布尔型。如果为 True,则检查是否有重复。
sort 布尔型。当 joinouter 时,如果非 concatenation 轴尚未对齐,则对其进行排序。
copy 布尔型。如果为 False,避免不必要的数据复制。

返回值

如果所有的 Series 对象都沿 axis=0 连接,则返回一个 Series 对象。如果任何要连接的对象是一个 DataFrame,或者 Series 对象沿 axis=1 连接,它返回一个 DataFrame 对象。

示例:使用 pandas.concat() 方法沿行轴连接 2 个 Pandas Series

import pandas as pd

ser_1 = pd.Series([20, 45, 36, 45])
print("Series-1:")
print(ser_1, "\n")

ser_2 = pd.Series([48, 46, 34, 38])
print("Series-2:")
print(ser_2, "\n")

concatenated_ser = pd.concat([ser_1, ser_2])

print("Result after Concatenation of ser_1 and ser_2:")
print(concatenated_ser)

输出:

Series-1:
0    20
1    45
2    36
3    45
dtype: int64

Series-2:
0    48
1    46
2    34
3    38
dtype: int64

Result after Concatenation of ser_1 and ser_2:
0    20
1    45
2    36
3    45
0    48
1    46
2    34
3    38
dtype: int64

它沿 axis=0 或按行连接 Series 对象 ser_1ser_2。其中一个 Series 对象的行堆叠在另一个对象之上。级联后的对象默认取父对象的 index 值。我们可以设置 ignore_index=True 来为连接对象分配新的索引值。

import pandas as pd

ser_1 = pd.Series([20, 45, 36, 45])
print("Series-1:")
print(ser_1, "\n")

ser_2 = pd.Series([48, 46, 34, 38])
print("Series-2:")
print(ser_2, "\n")

concatenated_ser = pd.concat([ser_1, ser_2], ignore_index=True)

print("Result after Concatenation of ser_1 and ser_2:")
print(concatenated_ser)

输出:

Series-1:
0    20
1    45
2    36
3    45
dtype: int64

Series-2:
0    48
1    46
2    34
3    38
dtype: int64

Result after Concatenation of ser_1 and ser_2:
0    20
1    45
2    36
3    45
4    48
5    46
6    34
7    38
dtype: int64

它将连接 Series 对象,并为连接后的 Series 对象分配新的索引值。

示例:使用 pandas.concat() 方法沿列轴连接 2 个 Pandas 系列对象

我们在 pandas.concat() 方法中设置 axis=1,以水平或沿列轴连接 Series 对象。

import pandas as pd

ser_1 = pd.Series([20, 45, 36, 45])
print("Series-1:")
print(ser_1, "\n")

ser_2 = pd.Series([48, 46, 34, 38])
print("Series-2:")
print(ser_2, "\n")

concatenated_ser = pd.concat([ser_1, ser_2], axis=1)

print("Result after Horizontal Concatenation of ser_1 and ser_2:")
print(concatenated_ser)

输出:

Series-1:
0    20
1    45
2    36
3    45
dtype: int64

Series-2:
0    48
1    46
2    34
3    38
dtype: int64

Result after Horizontal Concatenation of ser_1 and ser_2:
    0   1
0  20  48
1  45  46
2  36  34
3  45  38

它水平堆叠了 Series 对象 ser_1ser_2

示例:使用 pandas.concat() 方法连接 2 个 Pandas DataFrame 对象

import pandas as pd

df_1 = pd.DataFrame({"Col-1": [1, 2, 3, 4], "Col-2": [5, 6, 7, 8]})
print("DataFrame-1:")
print(df_1, "\n")

df_2 = pd.DataFrame({"Col-1": [10, 20, 30, 40], "Col-2": [50, 60, 70, 80]})
print("DataFrame-2:")
print(df_2, "\n")

concatenated_df = pd.concat([df_1, df_2], ignore_index=True)

print("Result after Horizontal Concatenation of df_1 and df_2:")
print(concatenated_df)

输出:

DataFrame-1:
   Col-1  Col-2
0      1      5
1      2      6
2      3      7
3      4      8

DataFrame-2:
   Col-1  Col-2
0     10     50
1     20     60
2     30     70
3     40     80

Result after Horizontal Concatenation of df_1 and df_2:
   Col-1  Col-2
0      1      5
1      2      6
2      3      7
3      4      8
4     10     50
5     20     60
6     30     70
7     40     80

它连接了 DataFrame 对象 df_1df_2。通过设置 ignore_index=True,我们将新的索引分配给被连接的 DataFrame。

示例:使用 pandas.concat() 方法将 DataFrame 与一个系列对象进行连接

import pandas as pd

df = pd.DataFrame({"Col-1": [1, 2, 3, 4], "Col-2": [5, 6, 7, 8]})
print("DataFrame Object:")
print(df, "\n")

ser = pd.Series([48, 46, 34, 38])
print("Series Object:")
print(ser, "\n")

ser_df = pd.concat([df, ser], axis=1)

print("Concatenation of ser and df:")
print(ser_df)

输出:

DataFrame Object:
   Col-1  Col-2
0      1      5
1      2      6
2      3      7
3      4      8

Series Object:
0    48
1    46
2    34
3    38
dtype: int64

Concatenation of ser and df:
   Col-1  Col-2   0
0      1      5  48
1      2      6  46
2      3      7  34
3      4      8  38

它将 DataFrame 对象 dfSeries 对象 ser 连在一起。由于我们在 pandas.concat() 方法中设置了 axis=1,所以连接是按列进行的。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Pandas DataFrame