介绍
在实际数据处理中,常常需要将不同的数据源进行合并,比如两个表格或者多个表格中的数据。这时候,就需要用到 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() 方法可以将多个表格进行拼接。