Pandas 使用索引合并数据框
在本文中,我们将介绍如何使用Pandas的索引来合并数据框。在很多情况下,我们需要将多个数据框按照它们的索引合并在一起。Pandas提供了一系列的函数来实现这个目的,包括concat函数和merge函数。本文将重点介绍merge函数的使用方法。
阅读更多:Pandas 教程
merge函数
merge函数是Pandas提供的一种用于数据框合并的函数。它的语法为:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
其中,left和right是两个需要合并的数据框,how是合并方式(默认为inner),on是需要合并的列(可以是一个数列,也可以是多个数列),left_on和right_on分别表示left和right数据框中需要合并的列名,left_index和right_index表示是否使用索引来合并。suffixes是当两个数据框中具有相同列名时,区分这些列名的后缀。
下面我们来看一个简单的例子。假设我们有两个数据框df1和df2:
import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A2', 'A3', 'A4', 'A5'],
'D': ['D2', 'D3', 'D4', 'D5'],
'E': ['E2', 'E3', 'E4', 'E5']},
index=[2, 3, 4, 5])
这两个数据框中都有列A,我们可以使用merge函数将它们合并在一起:
result = pd.merge(df1, df2, on='A', how='inner')
运行结果如下:
A B C D E
0 A2 B2 C2 D4 E4
1 A3 B3 C3 D3 E3
在这个例子中,由于我们指定了on=’A’,所以结果中只有那些在df1和df2中都有的A值被保留了下来,并且它们所属的行被合并在一起。
索引上的合并
除了在列上进行合并之外,我们还可以在索引上进行合并。
假设我们有两个数据框df1和df2,它们分别如下:
import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'D': ['D2', 'D3', 'D4', 'D5'],
'E': ['E2', 'E3', 'E4', 'E5']},
index=[2, 3, 4, 5])
在这个例子中,我们可以使用merge函数来合并这两个数据框:
result = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
运行结果如下:
A B C D E
0 A0 B0 C0 NaN NaN
1 A1 B1 C1 NaN NaN
2 A2 B2 C2 D2 E2
3 A3 B3 C3 D3 E3
4 NaN NaN NaN D4 E4
5 NaN NaN NaN D5 E5
在这个例子中,我们使用了left_index=True和right_index=True来指定在索引上进行合并,how=’outer’表示使用外连接的方式进行合并。结果中包含了df1和df2中全部的行,而那些没有对应值的单元格被填充为NaN。
当然,我们也可以使用其他的合并方式。比如说如果我们只想保留两个数据框中都存在的行(即使用内连接的方式合并),可以将how参数设置为inner:
result = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')
运行结果如下:
A B C D E
2 A2 B2 C2 D2 E2
3 A3 B3 C3 D3 E3
join函数
除了使用merge函数来合并数据框之外,我们还可以使用join函数。它的语法为:
df1.join(df2, how='left', lsuffix='_left', rsuffix='_right')
其中,df1是需要合并的数据框,how表示合并方式,lsuffix和rsuffix分别表示当两个数据框中具有相同列名时,区分这些列名的后缀。join函数还有另外一种语法:
df1.join([df2, df3])
这种语法可以在不同的数据框之间进行连接。
使用join函数时,我们需要注意的是,必须要先设置索引,否则join函数将无法识别数据框中的列名和索引。
下面我们来看一个简单的例子。假设我们有两个数据框df1和df2:
import pandas as pd
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
})
df2 = pd.DataFrame({'key': ['K2', 'K3', 'K4', 'K5'],
'C': ['C2', 'C3', 'C4', 'C5'],
'D': ['D2', 'D3', 'D4', 'D5'],
})
我们可以使用set_index函数将key列设为索引,然后使用join函数将它们合并在一起:
df1.set_index('key').join(df2.set_index('key'), how='left', lsuffix='_left', rsuffix='_right')
运行结果如下:
A B C D
key
K0 A0 B0 NaN NaN
K1 A1 B1 NaN NaN
K2 A2 B2 C2 D2
K3 A3 B3 C3 D3
在这个例子中,我们将df1和df2数据框中的key列设置为索引,然后使用join函数将它们以left连接的方式合并在一起。索引K4和K5在df1中不存在,因此这些行被填充为NaN。
总结
使用Pandas的merge函数和join函数可以方便地将多个数据框按照它们的列和索引进行合并。merge函数可以使用各种连接方式(内连接、外连接、左连接、右连接等),join函数则可以方便地按照索引进行连接。当处理需要合并的大型数据集时,这些函数可以帮助我们高效地完成数据整合的任务。
极客教程