pandas concat函数的使用

pandas concat函数的使用

参考:pandas concat

在数据分析过程中,经常需要将多个数据集合并为一个大的数据集。Pandas 提供了多种方式来合并数据,其中 concat() 函数是一个非常强大的工具,用于在轴向上连接或“堆叠”多个 DataFrame 或 Series 对象。本文将详细介绍 concat() 函数的使用方法,并通过多个示例展示其灵活性和实用性。

1. 基本概念

pandas.concat() 可以将多个 pandas 对象合并成一个新的 DataFrame。该函数的基本语法如下:

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 对象的列表。
  • axis: {0/'index', 1/'columns'}, 默认为 0。沿着哪个轴进行连接。
  • join: {'inner', 'outer'}, 默认为 ‘outer’。如何处理不同对象的索引轴上的索引。’outer’ 会取并集,’inner’ 会取交集。
  • ignore_index: 布尔值,默认为 False。如果为 True,则不使用连接轴上的索引值。
  • keys: 序列,默认为 None。如果传递了序列,则创建一个多级索引(hierarchical index)。
  • verify_integrity: 布尔值,默认为 False。检查新连接的轴是否包含重复项。
  • sort: 布尔值,默认为 False。在连接轴上排序,如果连接轴是多索引则不排序。
  • copy: 布尔值,默认为 True。如果为 False,则避免复制数据。

2. 示例代码

示例 1: 基本连接

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"],
    "C": ["C0", "C1", "C2", "C3"],
    "D": ["D0", "D1", "D2", "D3"]
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"],
    "C": ["C4", "C5", "C6", "C7"],
    "D": ["D8", "D9", "D10", "D11"]
}, index=[4, 5, 6, 7])

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

Output:

pandas concat函数的使用

示例 2: 沿列轴连接

import pandas as pd

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

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

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

Output:

pandas concat函数的使用

示例 3: 使用 keys 创建多级索引

import pandas as pd

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

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"]
})

result = pd.concat([df1, df2], keys=['pandasdataframe.com1', 'pandasdataframe.com2'])
print(result)

Output:

pandas concat函数的使用

示例 4: 忽略原有索引

import pandas as pd

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

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"]
})

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

Output:

pandas concat函数的使用

示例 5: 内连接

import pandas as pd

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

df2 = pd.DataFrame({
    "B": ["B2", "B3", "B6", "B7"],
    "C": ["C2", "C3", "C6", "C7"]
})

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

Output:

pandas concat函数的使用

示例 6: 验证连接的完整性

import pandas as pd

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

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

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

示例 7: 不复制数据

import pandas as pd

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

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"]
})

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

Output:

pandas concat函数的使用

示例 8: 使用 sort 参数

import pandas as pd

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

df2 = pd.DataFrame({
    "B": ["B2", "B3", "B6", "B7"],
    "C": ["C2", "C3", "C6", "C7"]
})

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

Output:

pandas concat函数的使用

3. 进阶使用

示例 9: 多个 DataFrame 的连接

import pandas as pd

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

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"]
})

df3 = pd.DataFrame({
    "A": ["A8", "A9", "A10", "A11"],
    "B": ["B8", "B9", "B10", "B11"]
})

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

Output:

pandas concat函数的使用

示例 10: 指定轴向连接

import pandas as pd

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

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

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

Output:

pandas concat函数的使用

示例 11: 指定 join_axes 参数(已弃用,使用 .reindex().align() 替代)

import pandas as pd

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

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"],
    "C": ["C4", "C5", "C6", "C7"]
})

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

Output:

pandas concat函数的使用

示例 12: 添加 Series 作为新列

import pandas as pd

df = pd.DataFrame({
    "A": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"]
})

s = pd.Series(["S0", "S1", "S2", "S3"], name='S')

result = pd.concat([df, s], axis=1)
print(result)

Output:

pandas concat函数的使用

示例 13: 处理重复索引

import pandas as pd

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

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

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

Output:

pandas concat函数的使用

示例 14: 使用不同的数据类型

import pandas as pd

df1 = pd.DataFrame({
    "A": [1, 2, 3, 4],
    "B": [5, 6, 7, 8]
})

df2 = pd.DataFrame({
    "A": [1.1, 2.2, 3.3, 4.4],
    "B": [5.5, 6.6, 7.7, 8.8]
})

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

Output:

pandas concat函数的使用

示例 15: 使用字典进行连接

import pandas as pd

frames = {
    'pandasdataframe.com1': pd.DataFrame({
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B3"]
    }),
    'pandasdataframe.com2': pd.DataFrame({
        "A": ["A4", "A5", "A6", "A7"],
        "B": ["B4", "B5", "B6", "B7"]
    })
}

result = pd.concat(frames)
print(result)

Output:

pandas concat函数的使用

示例 16: 处理大型数据集的连接

import pandas as pd

# 假设有多个大型 DataFrame
dfs = [pd.DataFrame({
    "A": range(1000),
    "B": range(1000)
}) for _ in range(10)]

result = pd.concat(dfs, ignore_index=True)
print(result)

Output:

pandas concat函数的使用

示例 17: 使用 concat 的参数组合

import pandas as pd

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

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

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

Output:

pandas concat函数的使用

示例 18: 使用多级索引进行复杂连接

import pandas as pd

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

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"]
})

result = pd.concat([df1, df2], keys=['Level1', 'Level2'])
print(result)

Output:

pandas concat函数的使用

示例 19: 使用 concat 来合并具有不同列的 DataFrame

import pandas as pd

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

df2 = pd.DataFrame({
    "B": ["B4", "B5", "B6", "B7"],
    "C": ["C4", "C5", "C6", "C7"]
})

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

Output:

pandas concat函数的使用

示例 20: 使用 concat 来处理具有不同索引的 DataFrame

import pandas as pd

df1 = pd.DataFrame({
    "A": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"]
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    "A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"]
}, index=[4, 5, 6, 7])

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

Output:

pandas concat函数的使用

5. 结论

通过本文的介绍和示例,我们可以看到 pandas.concat() 是一个非常强大的工具,能够处理各种复杂的数据合并需求。无论是简单的数据堆叠,还是复杂的索引和列的处理,concat() 都能提供灵活的解决方案。掌握这一工具,将有助于提高数据处理的效率和质量。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程