Python Pandas中合并数据的5个函数使用详解
引言
Pandas是Python中一个强大的数据分析库,提供了丰富的数据结构和数据分析常用的操作函数。
在日常的数据分析和处理中,经常会遇到需要把多个数据源进行合并的需求,比如对多个Excel或CSV文件进行合并,或者对数据库中的多个表进行连接等。
为了满足这些需求,Pandas提供了五个常见的合并数据的函数,其中包括:concat、merge、join、append和concatenate。这篇文章将详细介绍这五个函数的使用方法。
concat函数
concat函数用于把多个DataFrame对象按照一定的方式拼接在一起,可以按行或按列进行拼接。下面是concat函数的基本语法:
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, sort=False, copy=True)
objs
: 需要合并的DataFrame对象列表或字典。axis
: 合并的轴向,默认为0,表示按行拼接;如果为1,则表示按列拼接。join
: 合并的方式,可以为’inner’或’outer’,默认为’outer’,表示取并集。ignore_index
: 是否忽略原始索引,默认为False,表示使用原来的索引。keys
: 用于指定新的索引层次结构的标签列表。sort
: 是否对合并后的数据进行排序,默认为False,表示不排序。copy
: 是否对原始数据进行复制,默认为True,表示复制原始数据,不改变原始数据。
下面是一个按照行进行合并的示例:
import pandas as pd
data1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
data2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']})
data3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']})
result = pd.concat([data1, data2, data3])
print(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
0 A4 B4 C4 D4
1 A5 B5 C5 D5
2 A6 B6 C6 D6
3 A7 B7 C7 D7
0 A8 B8 C8 D8
1 A9 B9 C9 D9
2 A10 B10 C10 D10
3 A11 B11 C11 D11
按照列进行合并也非常类似,只需要将axis
参数设置为1即可。
merge函数
merge函数用于对两个DataFrame对象进行连接,可以指定连接的键(列)以及连接方式(内连接、左连接、右连接和外连接)。下面是merge函数的基本语法:
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
left
: 左侧的DataFrame对象。right
: 右侧的DataFrame对象。how
: 连接方式,可以为’inner’、’outer’、’left’和’right’,默认为’inner’。on
: 指定连接键(列)的名称。left_on
: 在左侧的DataFrame对象中指定连接键的名称。right_on
: 在右侧的DataFrame对象中指定连接键的名称。left_index
: 是否按照左侧的索引进行连接,默认为False。right_index
: 是否按照右侧的索引进行连接,默认为False。sort
: 是否对连接结果进行排序,默认为False。suffixes
: 连接键重名时用于区分的后缀名称,左侧的默认为’_x’,右侧的默认为’_y’。copy
: 是否对原始数据进行复制,默认为True,表示复制原始数据,不改变原始数据。indicator
: 是否添加特殊的列来标识合并的数据来源,默认为False,不添加。validate
: 可以为’one_to_one’、’one_to_many’或’many_to_one’,用于验证连接的完整性,默认为None,表示不验证。
下面是一个左连接的示例:
import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, on='key', how='left')
print(result)
输出结果为:
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
join函数
join函数是DataFrame对象特有的函数,用于对两个DataFrame对象进行连接,可以指定连接的方式(内连接、左连接、右连接和外连接)和连接键。下面是join函数的基本语法:
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
other
: 另一个DataFrame对象。on
: 指定连接键(列)的名称。how
: 连接方式,可以为’inner’、’outer’、’left’和’right’,默认为’left’。lsuffix
: 当连接键重名时,左侧的DataFrame对象中连接键的名称的后缀。rsuffix
: 当连接键重名时,右侧的DataFrame对象中连接键的名称的后缀。sort
: 是否对连接结果进行排序,默认为False。
下面是一个左连接的示例:
import pandas as pd
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'key': ['K0', 'K1', 'K2', 'K3']})
right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3'],
'key': ['K0', 'K1', 'K2', 'K3']})
result = left.join(right, on='key', how='left')
print(result)
输出结果为:
A B key C D key
0 A0 B0 K0 C0 D0 K0.1
1 A1 B1 K1 C1 D1 K1.1
2 A2 B2 K2 C2 D2 K2.1
3 A3 B3 K3 C3 D3 K3.1
append函数
append函数用于把一个DataFrame对象添加到另一个DataFrame对象的尾部。下面是append函数的基本语法:
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)
other
: 另一个DataFrame对象。ignore_index
: 是否忽略原始索引,默认为False,表示使用原来的索引。verify_integrity
: 是否在添加新数据之前验证新索引和列是否与旧的索引和列重复,默认为False,表示不验证。sort
: 是否对添加后的数据进行排序,默认为False,表示不排序。
下面是一个示例:
import pandas as pd
data1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
data2 = pd.DataFrame([[5, 6], [7, 8]], columns=['A', 'B'])
result = data1.append(data2)
print(result)
输出结果为:
A B
0 1 2
1 3 4
0 5 6
1 7 8
concatenate函数
concatenate函数是numpy库中的函数,用于把多个数组按照一定的方式拼接在一起。与pandas中的concat函数类似,但只能用于二维数组。下面是concatenate函数的基本语法:
numpy.concatenate((a1, a2, ...), axis=0, out=None)
(a1, a2, ...)
: 需要连接的数组。axis
: 连接的轴向,默认为0,表示按行拼接;如果为1,则表示按列拼接。out
: 结果输出的数组,如果不指定,则会创建一个新的数组。
下面是一个示例:
import numpy as np
data1 = np.array([[1, 2], [3, 4]])
data2 = np.array([[5, 6], [7, 8]])
result = np.concatenate((data1, data2), axis=0)
print(result)
输出结果为:
[[1 2]
[3 4]
[5 6]
[7 8]]
结语
以上就是Python Pandas中合并数据的5个函数的使用方法,当你需要进行数据拼接和连接的时候,可以根据具体的需求选择相应的函数进行操作。当然,这5个函数还有更多的参数和用法,读者可以自行查阅Pandas的官方文档进行深入学习。