DataFrame 数据合并实现(merge,join,concat)

介绍

在实际数据处理中,常常需要将不同的数据源进行合并,比如两个表格或者多个表格中的数据。这时候,就需要用到 Pandas 中的 DataFrame 数据结构合并方法,包括 merge、join、concat。DataFrame 是 Pandas 中的一个二维数据结构,可以看作是一张表格,其中每一列可以是不同类型(数字、字符串、布尔值等),可以进行各种操作。

merge

含义

merge() 方法将两个 DataFrame 对象中的数据进行合并,其中一个 DataFrame 对象为主,另一个为副,比如我们有两个表格,分别为 students 和 grades,我们可以通过将两个表格中的某些列进行关联(比如学生编号),从而将学生的基本信息和成绩信息合并到一个表格中。

语法格式

pd.merge(df_left, df_right, how='inner', on=None, left_on=None, right_on=None,

left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'))

参数说明

df_left:左边的 DataFrame 对象。

df_right:右边的 DataFrame 对象。

how:合并时的规则。有 inner、outer、left、right 四种规则。默认为 inner。

on:用于关联的列名。默认为 None,表示两个 DataFrame 对象中列名相同的列为关联列。

left_on:左边 DataFrame 对象中用于关联的列名。

right_on:右边 DataFrame 对象中用于关联的列名。

left_index:如果为 True,则使用左边 DataFrame 对象中的索引列作为关联列。

right_index:如果为 True,则使用右边 DataFrame 对象中的索引列作为关联列。

sort:是否按照关联列进行排序。默认为 False。

suffixes:如果列名冲突,添加后缀给列名。默认为 ('_x', '_y')。

使用方法

下面通过一个例子来演示 merge() 方法的使用。

假设我们有两个表格,分别为 students 和 grades。students表格中包含学生的基本信息,包括学号、姓名、性别、年龄等;grades表格中包含学生的成绩信息,包括学号、语文成绩、数学成绩、英语成绩等。

import pandas as pd

students = pd.DataFrame({

'id': ['001', '002', '003', '004'],

'name': ['张三', '李四', '王五', '赵六'],

'gender': ['男', '女', '男', '女'],

'age': ['18', '19', '20', '21']

})

grades = pd.DataFrame({

'id': ['001', '002', '003', '004'],

'chinese': [78, 90, 85, 88],

'math': [80, 86, 90, 92],

'english': [82, 88, 90, 85]

})

result = pd.merge(students, grades, on='id')

print(result)

上面的代码中,我们先创建了 students 和 grades 两个表格,然后使用 pd.merge() 方法按照学生编号将两个表格中的数据合并成一个新的表格,并将结果保存在 result 变量中。

输出结果如下:

{'id': ['001', '002', '003', '004'],

'name': ['张三', '李四', '王五', '赵六'],

'gender': ['男', '女', '男', '女'],

'age': ['18', '19', '20', '21'],

'chinese': [78, 90, 85, 88],

'math': [80, 86, 90, 92],

'english': [82, 88, 90, 85]}

可以看到,通过 merge() 方法,我们将两个表格中的数据合并到了一个新的表格中。

join

含义

join() 方法是 merge() 方法的简化版本,两者的主要区别在于 join() 方法只能按照索引列进行合并。如果两个表格都存在相同的索引列,那么可以直接使用 join() 方法将两个表格进行合并。

语法格式

df_left.join(df_right, how='left', lsuffix='_left', rsuffix='_right')

参数说明

df_left:左边的 DataFrame 对象。

df_right:右边的 DataFrame 对象。

how:合并时的规则。有 left、right、outer、inner 四种规则。

lsuffix:左边 DataFrame 对象的列名后缀。

rsuffix:右边 DataFrame 对象的列名后缀。

使用方法

下面通过一个例子来演示 join() 方法的使用。

假设我们有两个表格,分别为 students 和 grades。students表格和 grades 表格都存在一个名为 id 的索引列,我们可以直接使用 join() 方法将两个表格进行合并。

import pandas as pd

students = pd.DataFrame({

'name': ['张三', '李四', '王五', '赵六'],

'gender': ['男', '女', '男', '女'],

'age': [18, 19, 20, 21]

}, index=['001', '002', '003', '004'])

grades = pd.DataFrame({

'chinese': [78, 90, 85, 88],

'math': [80, 86, 90, 92],

'english': [82, 88, 90, 85]

}, index=['001', '002', '003', '004'])

result = students.join(grades)

print(result)

上面的代码中,我们先创建了 students 和 grades 两个表格,然后使用 join() 方法将两个表格中的数据合并成一个新的表格,并将结果保存在 result 变量中。

输出结果如下:

{'name': ['张三', '李四', '王五', '赵六'], 

'gender': ['男', '女', '男', '女'],

'age': [18, 19, 20, 21],

'chinese': [78, 90, 85, 88],

'math': [80, 86, 90, 92],

'english': [82, 88, 90, 85]}

可以看到,通过 join() 方法,我们将两个表格中的数据合并到了一个新的表格中。

concat

含义

concat() 方法可以将多个 DataFrame 对象拼接成一个 DataFrame 对象,也可以将一个 DataFrame 对象拆分成多个 DataFrame 对象。

语法格式

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None)

参数说明

objs:要拼接的 DataFrame 对象列表。

axis:沿着哪个轴进行拼接。0 表示纵向拼接(默认),1 表示横向拼接。

join:拼接时使用的规则。有 inner、outer 两种规则。

ignore_index:如果为 True,拼接后的 DataFrame 对象的索引将重新编号。

keys:添加层次索引的键。

使用方法

下面通过一个例子来演示 concat() 方法的使用。

假设我们有两个表格,分别为 a 和 b,我们可以使用 concat() 方法将这两个表格进行拼接。

import pandas as pd

a = pd.DataFrame({

'id': ['001', '002', '003', '004'],

'name': ['张三', '李四', '王五', '赵六'],

'gender': ['男', '女', '男', '女'],

'age': ['18', '19', '20', '21']

})

b = pd.DataFrame({

'id': ['005', '006', '007', '008'],

'name': ['周琦', '易建联', '姚明', '王治郅'],

'gender': ['男', '男', '男', '男'],

'age': ['22', '23', '24', '25']

})

result = pd.concat([a, b])

print(result)

上面的代码中,我们先创建了 a 和 b 两个表格,然后使用 concat() 方法将这两个表格中的数据进行拼接,并将结果保存在 result 变量中。

输出结果如下:

{'id': ['001', '002', '003', '004', '005', '006', '007', '008'], 

'name': ['张三', '李四', '王五', '赵六', '周琦', '易建联', '姚明', '王治郅'],

'gender': ['男', '女', '男', '女', '男', '男', '男', '男'],

'age': ['18', '19', '20', '21', '22', '23', '24', '25']}

可以看到,通过 concat() 方法,我们将两个表格中的数据拼接到了一个新的表格中。

总结

本文介绍了 Pandas 中的三种数据合并方法,包括 merge、join、concat。merge() 方法可以按照某个列将两个表格中的数据进行关联和合并;join() 方法是 merge() 方法的简化版,只能按照索引进行合并;concat() 方法可以将多个表格进行拼接。

后端开发标签