Pandas 基于列和索引的合并方法
在本文中,我们将介绍Pandas中的两种合并数据的方法:通过某一列进行合并和通过索引进行合并。这两种方法都是Pandas中重要的数据处理手段,在实际数据处理中会经常使用。
阅读更多:Pandas 教程
基于某一列进行合并
通过某一列进行合并,是指以某一列中的值为键,将两个Dataframe中的数据进行合并。这种方法常见的操作在join、merge和concat等方法中都有体现。下面分别介绍:
join方法
join方法是Pandas中用于合并两个Dataframe的方法,其参数说明如下:
- 参数other:要合并的另一个Dataframe。
- 参数on:用于合并的列名,默认为None。如果为None,则会自动寻找两个Dataframe中相同的列名进行合并。
- 参数how:合并方法,包括left、right、outer和inner,默认为’left’。
- 参数sort:合并后是否按照键值进行排序,默认为False。
下面示例代码中,我们将会创建两个Dataframe,分别为df1和df2,df1中包含’id’和’name’两列数据,df2中包含’id’和’age’两列数据。使用join方法将两个Dataframe中的数据合并,以’id’列为键。
import pandas as pd
df1 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'name': ['Tom', 'Jack', 'Lucy', 'Lily']})
df2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'age': [24, 28, 25, 21]})
result = df1.join(df2.set_index('id'), on='id')
print(result)
输出结果:
id name age
0 001 Tom 24
1 002 Jack 28
2 003 Lucy 25
3 004 Lily 21
merge方法
merge方法与join方法类似,也是用于合并两个Dataframe的方法。其参数说明如下:
- 参数right:要合并的另一个Dataframe。
- 参数on:用于合并的列名,默认为None。如果为None,则会自动寻找两个Dataframe中相同的列名进行合并。
- 参数how:合并方法,包括left、right、outer和inner,默认为’inner’。
- 参数sort:合并后是否按照键值进行排序,默认为False。
下面示例代码中,我们将会创建两个Dataframe,分别为df1和df2,df1中包含’id’和’name’两列数据,df2中包含’id’和’age’两列数据。使用merge方法将两个Dataframe中的数据合并,以’id’列为键。
import pandas as pd
df1 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'name': ['Tom', 'Jack', 'Lucy', 'Lily']})
df2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'age': [24, 28, 25, 21]})
result = pd.merge(df1, df2, on='id')
print(result)
输出结果:
id name age
0 001 Tom 24
1 002 Jack 28
2 003 Lucy 25
3 004 Lily 21
concat方法
concat方法用于沿着一个轴将多个Dataframe连接在一起,其基本语法为:
result = pd.concat(objs, axis=0, join='outer', sort=False, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
其中,参数说明如下:
- 参数objs:要连接的Dataframe。
- 参数axis:连接的轴,可以为0(沿着行方向连接)或1(沿着列方向连接),默认为0。
- 参数join:连接方式,包括’outer’和’inner’,默认为’outer’。
- 参数sort:连接后是否按照索引排序,默认为False。
下面示例代码中,我们将会创建两个Dataframe,分别为df1和df2,df1中包含’id’和’name’两列数据,df2中包含’id’和’age’两列数据。使用concat方法将两个Dataframe中的数据按行方向连接起来。
import pandas as pd
df1 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'name': ['Tom', 'Jack', 'Lucy', 'Lily']})
df2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'age': [24, 28, 25, 21]})
result = pd.concat([df1, df2], axis=1)
print(result)
输出结果:
id name id age
0 001 Tom 001 24
1 002 Jack 002 28
2 003 Lucy 003 25
3 004 Lily 004 21
基于索引进行合并
除了以某一列进行合并外,Pandas也支持以索引进行合并。在这种情况下,我们需要将某一列设为索引,之后将两个Dataframe的索引进行合并即可。下面介绍基于索引进行合并的方法:
merge方法
通过merge方法,可以指定left_index和right_index参数将两个Dataframe的索引进行合并。示例代码如下:
import pandas as pd
df1 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'name': ['Tom', 'Jack', 'Lucy', 'Lily']})
df1 = df1.set_index('id')
df2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'age': [24, 28, 25, 21]})
df2 = df2.set_index('id')
result = pd.merge(df1, df2, left_index=True, right_index=True)
print(result)
输出结果:
name age
id
001 Tom 24
002 Jack 28
003 Lucy 25
004 Lily 21
join方法
通过join方法,可以指定参数lsuffix和rsuffix将相同列名的数据进行合并。示例代码如下:
import pandas as pd
df1 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'name': ['Tom', 'Jack', 'Lucy', 'Lily']})
df1 = df1.set_index('id')
df2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'age': [24, 28, 25, 21]})
df2 = df2.set_index('id')
result = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(result)
输出结果:
name_left age_right
id
001 Tom 24
002 Jack 28
003 Lucy 25
004 Lily 21
总结
本文介绍了Pandas中两种合并数据的方法:通过某一列进行合并和通过索引进行合并。这两种方法都是Pandas中重要的数据处理手段,在实际数据处理中会经常使用。需要注意的是,在使用这两种方法时,需要注意各个参数的含义和具体用法,以充分发挥其强大的数据处理功能。
极客教程