Pandas中的列合并

Pandas中的列合并

参考:pandas concat columns

在数据处理和分析中,经常需要将不同的数据集或数据片段合并成一个整体,以便进行更深入的分析。Pandas库提供了多种方式来实现数据的合并,其中concat()函数是一个非常强大的工具,用于沿着一定的轴将多个pandas对象合并到一起。本文将详细介绍如何使用Pandas的concat()函数来合并列,包括不同的参数和提供多个示例代码。

Pandas concat() 函数简介

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: 一个序列或映射,这里面的每个对象都必须是一个Series或DataFrame。
  • axis: {0/'index', 1/'columns'},默认为0。沿着哪个轴进行连接。
  • join: {'inner', 'outer'},默认为’outer’。如何处理不同对象的索引轴。
  • ignore_index: 布尔值,默认为False。如果为True,则不使用索引标签。
  • keys: 序列,默认为None。如果传递了序列,则创建一个多级索引(层次化索引)。
  • levels: 序列的序列,默认为None。用于构建MultiIndex的级别(仅在keys不为None时有效)。
  • names: 列表,默认为None。用于创建层次化索引的级别名称(仅在keys不为None时有效)。
  • verify_integrity: 布尔值,默认为False。检查新连接的轴是否包含重复项。
  • sort: 布尔值,默认为False。在沿轴连接时,根据连接键对数据进行排序。
  • copy: 布尔值,默认为True。如果为False,则在可能的情况下避免复制数据。

示例代码

示例1:基本的列合并

import pandas as pd

# 创建两个DataFrame
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中的列合并

示例2:使用ignore_index选项

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({
    "C": ["C0", "C1", "C2", "C3"],
    "D": ["D0", "D1", "D2", "D3"]
}, index=[2, 3, 4, 5])

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

Output:

Pandas中的列合并

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

import pandas as pd

# 创建两个DataFrame
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"]
})

# 使用keys参数
result = pd.concat([df1, df2], axis=1, keys=['First', 'Second'])
print(result)

Output:

Pandas中的列合并

示例4:使用join进行内连接

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": ["B2", "B3", "B4", "B5"],
    "C": ["C2", "C3", "C4", "C5"]
}, index=[2, 3, 4, 5])

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

Output:

Pandas中的列合并

示例5:验证数据完整性

import pandas as pd

# 创建两个DataFrame
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"]
})

# 尝试合并并检查数据完整性
try:
    result = pd.concat([df1, df2], axis=1, verify_integrity=True)
    print(result)
except ValueError as e:
    print("Error:", e)

Output:

Pandas中的列合并

示例6:不复制数据

import pandas as pd

# 创建两个DataFrame
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, copy=False)
print(result)

Output:

Pandas中的列合并

示例7:排序数据

import pandas as pd

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

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

# 合并列并排序
result = pd.concat([df1, df2], axis=1, sort=True)
print(result)

Output:

Pandas中的列合并

示例8:合并多个DataFrame

import pandas as pd

# 创建多个DataFrame
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"]
})

df3 = pd.DataFrame({
    "E": ["E0", "E1", "E2", "E3"],
    "F": ["F0", "F1", "F2", "F3"]
})

# 合并多个DataFrame
result = pd.concat([df1, df2, df3], axis=1)
print(result)

Output:

Pandas中的列合并

示例9:使用不同索引的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({
    "C": ["C4", "C5", "C6", "C7"],
    "D": ["D4", "D5", "D6", "D7"]
}, index=[4, 5, 6, 7])

# 使用外连接合并DataFrame
result = pd.concat([df1, df2], axis=1, join='outer')
print(result)

Output:

Pandas中的列合并

示例10:合并时使用自定义索引名称

import pandas as pd

# 创建DataFrame
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"]
})

# 使用keys参数并指定names
result = pd.concat([df1, df2], axis=1, keys=['Group1', 'Group2'], names=['Upper', 'Lower'])
print(result)

Output:

Pandas中的列合并

示例11:合并具有重复列名的DataFrame

import pandas as pd

# 创建具有重复列名的DataFrame
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], axis=1)
print(result)

Output:

Pandas中的列合并

示例12:合并时保留原始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({
    "C": ["C0", "C1", "C2", "C3"],
    "D": ["D0", "D1", "D2", "D3"]
}, index=[0, 1, 2, 3])

# 合并并保留原始索引
result = pd.concat([df1, df2], axis=1, ignore_index=False)
print(result)

Output:

Pandas中的列合并

示例13:合并时创建新的索引

import pandas as pd

# 创建DataFrame
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, ignore_index=True)
print(result)

Output:

Pandas中的列合并

示例14:使用多级索引进行复杂合并

import pandas as pd

# 创建DataFrame
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, keys=['Level1', 'Level2'])
print(result)

Output:

Pandas中的列合并

示例15:合并时考虑数据排序

import pandas as pd

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

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

# 合并并考虑排序
result = pd.concat([df1, df2], axis=1, sort=True)
print(result)

Output:

Pandas中的列合并

以上示例展示了使用Pandas的concat()函数进行列合并的多种情况和技巧。通过这些示例,可以看到concat()函数在数据处理中的灵活性和强大功能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程