如何使用 pandas 的concat函数来合并多个数据框

如何使用 pandas 的concat函数来合并多个数据框

参考:pandas concat multiple dataframes

在数据分析和数据处理中,经常需要将多个数据框(DataFrame)合并为一个。Pandas 提供了一个非常有用的函数 concat(),可以轻松地实现多个数据框的合并。本文将详细介绍如何使用 pandasconcat() 函数来合并多个数据框,并提供多个示例代码来展示不同的使用场景。

1. pandas concat() 函数基础

concat() 函数是 pandas 中用于合并两个或多个 pandas 数据框的主要工具。基本语法如下:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
  • objs: 需要合并的数据框列表或字典。
  • axis: 合并的轴向,默认为0,表示纵向合并;设置为1表示横向合并。
  • join: 指定如何处理不同数据框的索引。outer 表示取并集,inner 表示取交集。
  • ignore_index: 布尔值,是否忽略原来的索引。
  • keys: 创建一个多级索引,用给定的键作为外层索引。
  • verify_integrity: 检查新的合并的数据框是否包含重复的索引。
  • sort: 是否在合并时对索引进行排序。
  • copy: 是否复制数据,默认为 True。

示例代码 1:基本的纵向合并

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
}, index=[0, 1, 2])

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"]
}, index=[3, 4, 5])

# 使用 concat 进行合并
result = pd.concat([df1, df2])
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 2:忽略原索引进行合并

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
})

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"]
})

# 使用 concat 进行合并,忽略原来的索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 3:横向合并数据框

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
})

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

# 使用 concat 进行横向合并
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 4:使用 keys 参数创建多级索引

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
})

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"]
})

# 使用 keys 参数进行合并,创建多级索引
result = pd.concat([df1, df2], keys=['pandasdataframe.com1', 'pandasdataframe.com2'])
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 5:合并时使用内连接

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
})

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

# 使用内连接进行合并
result = pd.concat([df1, df2], join='inner')
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

2. 处理不同列名的数据框

在实际应用中,我们可能遇到需要合并的数据框具有不同的列名。这时,concat() 函数提供了灵活的处理方式,可以通过设置不同的参数来应对这种情况。

示例代码 6:合并具有不同列名的数据框

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
})

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

# 使用 concat 进行合并,处理不同的列名
result = pd.concat([df1, df2], sort=False)
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 7:合并时只包含共有的列

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
})

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "C": ["C3", "C4", "C5"]
})

# 使用内连接进行合并,只包含共有的列
result = pd.concat([df1, df2], join='inner')
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

3. 高级应用

concat() 函数的灵活性还体现在它可以处理更复杂的数据结构,如多级索引的数据框。此外,通过合理设置参数,可以有效地处理大数据集的合并,优化内存使用和计算效率。

示例代码 8:合并具有多级索引的数据框

import pandas as pd

# 创建具有多级索引的数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
}).set_index(["A", "B"])

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"]
}).set_index(["A", "B"])

# 使用 concat 进行合并
result = pd.concat([df1, df2])
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 9:在合并大数据集时优化内存使用

import pandas as pd

# 创建大数据集示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"] * 1000,
    "B": ["B0", "B1", "B2"] * 1000
})

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"] * 1000,
    "B": ["B3", "B4", "B5"] * 1000
})

# 使用 concat 进行合并,优化内存使用
result = pd.concat([df1, df2], copy=False)
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 10:合并时保留特定的列

import pandas as pd

# 创建示例数据框
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"],
    "C": ["C0", "C1", "C2"]
})

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"],
    "D": ["D0", "D1", "D2"]
})

# 使用 concat 进行合并,保留特定的列
result = pd.concat([df1[['A', 'B']], df2[['A', 'B']]])
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

4. 错误处理和异常

在使用 concat() 函数合并数据框时,可能会遇到各种错误和异常,如索引重复、数据类型不匹配等。了解如何处理这些异常是进行有效数据合并的关键。

示例代码 11:处理索引重复的情况

import pandas as pd

# 创建示例数据框,故意制造索引重复
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2"],
    "B": ["B0", "B1", "B2"]
}, index=[0, 1, 2])

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"]
}, index=[2, 3, 4])

# 使用 concat 进行合并,检查索引重复
try:
    result = pd.concat([df1, df2], verify_integrity=True)
    print(result)
except ValueError as e:
    print("Error:", e)

Output:

如何使用 pandas 的concat函数来合并多个数据框

示例代码 12:处理数据类型不匹配的情况

import pandas as pd

# 创建示例数据框,数据类型不匹配
df1 = pd.DataFrame({
    "A": [1, 2, 3],
    "B": [4, 5, 6]
})

df2 = pd.DataFrame({
    "A": ["A3", "A4", "A5"],
    "B": ["B3", "B4", "B5"]
})

# 使用 concat 进行合并,处理数据类型不匹配
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

如何使用 pandas 的concat函数来合并多个数据框

5. 总结

本文详细介绍了如何使用 pandas 的 concat() 函数来合并多个数据框。通过多个示例代码,我们展示了 concat() 函数的基本用法、处理不同列名和数据类型的方法,以及如何优化内存使用和处理异常。掌握这些技巧将有助于在数据分析和数据处理中有效地合并数据,提高工作效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程