Pandas concat vs merge

Pandas concat vs merge

参考:pandas concat vs merge

在数据分析和数据处理中,经常需要将不同的数据集合并为一个大的数据集。Pandas库提供了多种方式来合并数据,其中最常用的是concatmerge。这两种方法虽然都可以用来合并数据,但它们的使用场景和方式有所不同。本文将详细介绍concatmerge的区别、用法以及适用场景,并通过多个示例代码来展示如何在实际中使用这两种方法。

pandas concat

concat函数主要用于沿着一条轴将多个对象堆叠到一起。例如,可以是沿着水平轴将两个DataFrame合并,或者沿着垂直轴将多个Series堆叠成一个DataFrame。

示例代码1:简单的DataFrame合并

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': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

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

Output:

Pandas concat vs merge

示例代码2:设置轴向

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': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# 沿着列轴合并
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

Pandas concat vs merge

示例代码3:使用ignore_index参数

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': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# 忽略原有索引,创建新的索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas concat vs merge

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

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': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# 使用keys创建多级索引
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)

Output:

Pandas concat vs merge

示例代码5:合并具有不同列的DataFrame

import pandas as pd

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

df2 = pd.DataFrame({
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
}, index=[4, 5, 6, 7])

# 合并具有不同列的DataFrame
result = pd.concat([df1, df2], sort=False)
print(result)

Output:

Pandas concat vs merge

pandas merge

merge函数主要用于根据一个或多个键将不同的DataFrame的行连接起来。这类似于SQL中的JOIN操作。merge可以根据一个或多个键的内部、外部或交叉合并。

示例代码6:简单的DataFrame合并

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
})

# 使用merge进行合并
result = pd.merge(df1, df2, on='key')
print(result)

Output:

Pandas concat vs merge

示例代码7:指定合并方式

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# 使用左连接
result_left = pd.merge(df1, df2, how='left', on='key')
print(result_left)

# 使用右连接
result_right = pd.merge(df1, df2, how='right', on='key')
print(result_right)

# 使用外连接
result_outer = pd.merge(df1, df2, how='outer', on='key')
print(result_outer)

# 使用内连接
result_inner = pd.merge(df1, df2, how='inner', on='key')
print(result_inner)

Output:

Pandas concat vs merge

示例代码8:多键合并

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key1': ['K0', 'K0', 'K1', 'K2'],
    'key2': ['K0', 'K1', 'K0', 'K1'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key1': ['K0', 'K1', 'K1', 'K2'],
    'key2': ['K0', 'K0', 'K0', 'K0'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
})

# 使用多键合并
result = pd.merge(df1, df2, on=['key1', 'key2'])
print(result)

Output:

Pandas concat vs merge

示例代码9:使用指示器

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# 使用指示器
result = pd.merge(df1, df2, how='outer', on='key', indicator=True)
print(result)

Output:

Pandas concat vs merge

示例代码10:合并时使用不同的列名

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key1': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3']
})

df2 = pd.DataFrame({
    'key2': ['K0', 'K1', 'K2', 'K4'],
    'B': ['B0', 'B1', 'B2', 'B4']
})

# 使用不同的列名进行合并
result = pd.merge(df1, df2, left_on='key1', right_on='key2')
print(result)

Output:

Pandas concat vs merge

示例代码11:合并时处理重复列名

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A4', 'A5', 'A6', 'A7'],
    'C': ['C0', 'C1', 'C2', 'C3']
})

# 处理重复列名
result = pd.merge(df1, df2, on='key', suffixes=('_df1', '_df2'))
print(result)

Output:

Pandas concat vs merge

示例代码12:使用条件过滤合并结果

import pandas as pd

# 创建两个DataFrame
df1 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3'],
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K4'],
    'C': ['C0', 'C1', 'C2', 'C4'],
    'D': ['D0', 'D1', 'D2', 'D4']
})

# 使用条件过滤合并结果
result = pd.merge(df1, df2, on='key')
result = result[result['A'] > 'A1']
print(result)

Output:

Pandas concat vs merge

以上示例代码展示了concatmerge在不同情况下的使用方法。通过这些示例,我们可以看到concat适用于简单的沿一个轴的合并,而merge则提供了更为复杂的基于键的合并选项,类似于数据库中的JOIN操作。在实际应用中,选择哪种方法取决于具体的数据结构和需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程