Pandas concat dataframes

Pandas concat dataframes

参考:pandas concat dataframes

在数据分析和数据处理中,经常需要将多个数据集合并为一个更大的数据集。Pandas 提供了多种方式来实现数据的合并和连接,其中 concat() 函数是一个非常强大的工具,用于在轴向上合并多个 Pandas 对象。本文将详细介绍 concat() 函数的使用方法,并通过多个示例展示如何在实际场景中应用这一函数。

1. concat() 函数简介

concat() 函数主要用于将多个 DataFrameSeries 对象沿着一个轴进行合并。它的基本语法如下:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
  • objs: 需要合并的 DataFrameSeries 对象的列表或字典。
  • axis: 合并的轴向,默认为0,表示纵向合并;设置为1表示横向合并。
  • join: 指定合并的方式,outer 表示外连接,inner 表示内连接。
  • ignore_index: 布尔值,是否忽略原有的索引。
  • keys: 用于形成层次化索引的值。
  • levels: 指定用作层次化索引各级别上的索引,仅当 keys 不为 None 时有效。
  • names: 用于结果层次化索引的名称。
  • verify_integrity: 检查新合并的轴是否包含重复项。
  • sort: 在合并时是否对索引进行排序。
  • copy: 是否复制数据。

2. 纵向合并

纵向合并是将数据按行拼接,这是 concat() 函数的默认行为。

示例代码 1

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
}, index=[2, 3])

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

Output:

Pandas concat dataframes

示例代码 2

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
}, index=[2, 3])

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

Output:

Pandas concat dataframes

示例代码 3

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
}, index=[2, 3])

result = pd.concat([df1, df2], keys=["group1", "group2"])
print(result)

Output:

Pandas concat dataframes

3. 横向合并

横向合并是将数据按列拼接,需要设置 axis=1

示例代码 4

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "C": ["C0", "C1"],
    "D": ["D0", "D1"]
})

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

Output:

Pandas concat dataframes

示例代码 5

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "C": ["C0", "C1"],
    "D": ["D0", "D1"]
})

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

Output:

Pandas concat dataframes

示例代码 6

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "C": ["C0", "C1"],
    "D": ["D0", "D1"]
})

result = pd.concat([df1, df2], axis=1, keys=["group1", "group2"])
print(result)

Output:

Pandas concat dataframes

4. 使用不同的合并方式

join 参数控制合并时索引的对齐方式,可以是 inner(内连接)或 outer(外连接,默认)。

示例代码 7

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "B": ["B2", "B3"],
    "C": ["C0", "C1"]
}, index=[1, 2])

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

Output:

Pandas concat dataframes

示例代码 8

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "B": ["B2", "B3"],
    "C": ["C0", "C1"]
}, index=[1, 2])

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

Output:

Pandas concat dataframes

5. 处理重复索引

当合并的对象具有重复索引时,可以使用 verify_integrity 参数来检查。

示例代码 9

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
}, index=[1, 2])

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

6. 排序索引

通过设置 sort 参数,可以在合并时对索引进行排序。

示例代码 10

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[1, 0])

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
}, index=[3, 2])

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

Output:

Pandas concat dataframes

7. 复制数据

copy 参数控制是否复制数据,这可以影响合并操作的性能。

示例代码 11

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
}, index=[0, 1])

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
}, index=[2, 3])

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

Output:

Pandas concat dataframes

8. 使用层次化索引

通过设置 keys 参数,可以在合并时创建层次化索引,这有助于维护数据来源的信息。

示例代码 12

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
})

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

Output:

Pandas concat dataframes

示例代码 13

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "A": ["A2", "A3"],
    "B": ["B2", "B3"]
})

result = pd.concat([df1, df2], keys=["first group", "second group"], names=["Source", "Row ID"])
print(result)

Output:

Pandas concat dataframes

9. 合并时使用不同的列名

当合并的 DataFrame 使用不同的列名时,可以通过设置 join_axes 参数来指定使用哪些列进行合并。

示例代码 14

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "C": ["C0", "C1"],
    "D": ["D0", "D1"]
})

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

示例代码 15

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "C": ["C0", "C1"],
    "D": ["D0", "D1"]
})

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

10. 处理缺失数据

在合并过程中,如果某些列在某些 DataFrame 中不存在,Pandas 将自动填充这些列的缺失值。

示例代码 16

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "B": ["B2", "B3"],
    "C": ["C0", "C1"]
})

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

Output:

Pandas concat dataframes

示例代码 17

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1"],
    "B": ["B0", "B1"]
})

df2 = pd.DataFrame({
    "C": ["C2", "C3"],
    "D": ["D0", "D1"]
})

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

Output:

Pandas concat dataframes

11. 总结

通过本文的介绍和示例,我们可以看到 Pandas 的 concat() 函数是一个非常强大的工具,用于在不同的场景下合并数据。无论是纵向还是横向合并,使用内连接还是外连接,处理索引的复制或创建层次化索引,concat() 都能提供灵活的解决方案。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程