Python中DataFrame数据合并Merge()和concat()方法详解
在数据分析中,经常需要将多个数据源中的数据合并到一起,这就需要涉及到数据合并的相关操作。Python中Pandas库提供了两个主要的方法可以用于数据合并:merge()和concat()。
Merge()方法详解
merge()方法可以将多个数据集(DataFrame)按照一些键(key)进行合并,并提供了多个用于定义合并方式的参数,如合并方式、数据源之间的关联关系等。
方法参数详解
merge方法中主要需要输入的参数包括:
- left:第一个DataFrame对象。
- right:第二个DataFrame对象。
- on:指定合并所需要的键(key),必须同时存在于两个DataFrame中。
- how:指定合并方式,有inner、outer、left、right四种方式,默认为inner。
- suffixes:指定当两个DataFrame中存在同名但不重叠的列名时的后缀,默认为(_x、_y)。
下面分别对参数进行详细说明:
- left和right:需要进行合并的两个DataFrame对象。
- on:指定合并所需要的键,必须同时存在于两个DataFrame中,可以是字符串、列表或者多个键的元组。当键名相同时可以省略。
- how:指定合并方式,inner为内连接(只保留键相同的行)、outer为外连接(保留所有行)、left为左连接(以左边的DataFrame为准,保留所有左边的行)、right为右连接(以右边的DataFrame为准,保留所有右边的行)。
- suffixes:指定当两个DataFrame中存在同名但不重叠的列名时的后缀。
示例说明
现在有两个DataFrame对象,分别是data1和data2。
import pandas as pd
import numpy as np
# 创建第一个DataFrame
data1 = pd.DataFrame({'Name': ['John', 'Tom', 'Jane', 'Mary'], 'Score': [78, 80, 84, 97]})
print('data1:\n', data1)
# 创建第二个DataFrame
data2 = pd.DataFrame({'Name': ['John', 'Tom', 'Bob', 'Mary'], 'Age': [18, 21, 22, 19]})
print('data2:\n', data2)
输出结果为:
data1:
Name Score
0 John 78
1 Tom 80
2 Jane 84
3 Mary 97
data2:
Name Age
0 John 18
1 Tom 21
2 Bob 22
3 Mary 19
我们可以通过这两个DataFrame对象对数据进行合并:
# 合并两个DataFrame,按照Name列相同的行进行连接
data_merge = pd.merge(data1, data2, on='Name')
print('合并结果:\n', data_merge)
此时输出结果为:
合并结果:
Name Score Age
0 John 78 18
1 Tom 80 21
2 Mary 97 19
可以看到,在使用merge()合并两个DataFrame时,我们可以通过指定on参数来指定需要进行合并的键,生成新的data_merge,结果表明,它只保留了两个表中都出现的John、Tom和Mary,并将他们的年龄和分数合并到了一起。
Concat()方法详解
concat()方法可以将两个或多个数据集(DataFrame)沿着一个轴(axis)进行连接,并提供多个参数用于指定级联方式和级联轴等。
方法参数详解
concat方法中主要需要输入的参数包括:
- objs:一个列表,包含需要级联的两个或多个DataFrame对象。可以是Series、DataFrame、Panel等。
- axis:级联轴(合并轴),axis=0表示按照行轴进行级联,axis=1表示按照列轴进行级联,默认为行级联(axis=0)。
- join:指定级联时的方式,inner为内连接(只保留键相同的行)、outer为外连接(保留所有行)。
- keys:用于指定级联对象的层次结构表示方法,可以是列表或者元组。如果空缺,则为对象的自然索引。
- ignore_index:是否缺省行索引。通过指定ignore_index=True可以避免级联后出现行索引重复的情况。
示例说明
我们可以通过下面的代码来示例理解concat()方法。
# 创建两个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])
print('df1:\n', df1)
print('df2:\n', df2)
此时输出结果为:
df1:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
df2:
A B C D
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
接下来我们就可以通过concat()方法将这两个DataFrame对象进行合并:
# 将两个DataFrame进行级联
result = pd.concat([df1, df2])
print('result:\n', result)
输出结果为:
result:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
而如果我们想要在级联时指定keys,可以通过如下的方式实现:
# 将两个DataFrame进行级联,指定keys为df1和df2
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print('result:\n', result)
此时输出结果为:
result:
A B C D
df1 0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
df2 4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
可以看到,通过指定keys,我们为两个合并的DataFrame对象增加了索引层次结构,方便后续数据处理。
总结
在数据处理和分析过程中,我们会经常遇到需要多个数据源进行合并的情况。本文介绍了Python中实现DataFrame数据合并的两种方法:merge()和concat(),讲解了它们的参数和使用方法,并给出了相应的示例。通过本文的学习,应该可以掌握Pandas库中DataFrame数据合并操作的基本知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中DataFrame数据合并merge()和concat()方法详解 - Python技术站