当前位置:优草派 > 问答 > Python问答

python中如何使用pandas.merge?

标签: Python  Python开发  pandas  作者: ldtsss

回答:

在数据处理过程中,我们经常需要将多个数据集合并成一个,这就需要用到pandas的merge函数。pandas.merge()函数是pandas库中的一个基本函数,它的作用是根据指定的键将两个数据集合并起来。本文将从以下几个角度来介绍如何使用pandas.merge()函数。

一、基本语法

pandas.merge()函数的基本语法如下:

```python

result = pd.merge(left, right, on=None, how='inner', indicator=False)

```

其中,left和right是要合并的两个数据集,on是用来指定连接的键,how是用来指定连接方式,indicator是用来指示连接方式的列。具体参数解释如下:

1. left和right:要合并的两个数据集。可以是DataFrame、Series或者Index。

2. on:指定连接的键。可以是一个列名或者多个列名组成的列表。如果不指定,则默认使用两个数据集中所有相同的列作为连接键。

3. how:指定连接方式。有四种方式可选,包括'left'、'right'、'outer'、'inner',默认为'inner'。

4. indicator:用来指示连接方式的列。如果指定为True,则会在结果中添加一个名为_merge的列,其值表示左侧数据集、右侧数据集或两者都有的情况。

二、连接方式

1. inner连接

inner连接是指连接两个数据集中在连接键上有相同值的行,即取两个数据集的交集。这是默认的连接方式。例如:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})

result = pd.merge(df1, df2, on='key')

print(result)

```

输出结果为:

```

key value_x value_y

0 B 2 5

1 D 4 6

```

2. left连接

left连接是指以左侧数据集为基础,连接右侧数据集中与左侧数据集在连接键上有相同值的行,如果右侧数据集中没有与左侧数据集匹配的行,则用NaN填充。例如:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})

result = pd.merge(df1, df2, on='key', how='left')

print(result)

```

输出结果为:

```

key value_x value_y

0 A 1 NaN

1 B 2 5.0

2 C 3 NaN

3 D 4 6.0

```

3. right连接

right连接是指以右侧数据集为基础,连接左侧数据集中与右侧数据集在连接键上有相同值的行,如果左侧数据集中没有与右侧数据集匹配的行,则用NaN填充。例如:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})

result = pd.merge(df1, df2, on='key', how='right')

print(result)

```

输出结果为:

```

key value_x value_y

0 B 2.0 5

1 D 4.0 6

2 E NaN 7

3 F NaN 8

```

4. outer连接

outer连接是指连接两个数据集中所有行,如果两个数据集中在连接键上有相同值的行,则进行连接,否则用NaN填充。例如:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})

result = pd.merge(df1, df2, on='key', how='outer')

print(result)

```

输出结果为:

```

key value_x value_y

0 A 1.0 NaN

1 B 2.0 5.0

2 C 3.0 NaN

3 D 4.0 6.0

4 E NaN 7.0

5 F NaN 8.0

```

三、连接键

在使用pandas.merge()函数时,需要指定连接键。连接键是用来连接两个数据集的一个或多个列。连接键可以是一个列名或多个列名组成的列表。如果连接键不指定,则默认使用两个数据集中所有相同的列作为连接键。

例如,我们有两个数据集df1和df2,其中df1有两列key和value,df2有两列key和value。如果我们想要以key作为连接键进行连接,则可以这样写:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})

result = pd.merge(df1, df2, on='key')

print(result)

```

输出结果为:

```

key value_x value_y

0 B 2 5

1 D 4 6

```

四、多列连接

在某些情况下,连接键可能需要使用多个列。例如,我们有两个数据集df1和df2,其中df1有三列key1、key2、value,df2有两列key1、key2、value。如果我们想要以key1和key2作为连接键进行连接,则可以这样写:

```python

import pandas as pd

df1 = pd.DataFrame({'key1': ['A', 'B', 'C', 'D'], 'key2': ['a', 'b', 'c', 'd'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key1': ['B', 'D', 'E', 'F'], 'key2': ['b', 'd', 'e', 'f'], 'value': [5, 6, 7, 8]})

result = pd.merge(df1, df2, on=['key1', 'key2'])

print(result)

```

输出结果为:

```

key1 key2 value_x value_y

0 B b 2 5

1 D d 4 6

```

五、重复列名

在使用pandas.merge()函数时,如果两个数据集中有重复的列名,会出现什么情况呢?例如,我们有两个数据集df1和df2,其中df1有两列key和value,df2有两列value和key。如果我们想要以key作为连接键进行连接,则可以这样写:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'value': [5, 6, 7, 8], 'key': ['B', 'D', 'E', 'F']})

result = pd.merge(df1, df2, on='key')

print(result)

```

输出结果为:

```

key value_x value_y

0 B 2 5

1 D 4 6

```

可以看到,pandas会自动将重复列名的列添加后缀_x和_y。如果想要自定义这些后缀,可以使用suffixes参数。例如:

```python

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'value': [5, 6, 7, 8], 'key': ['B', 'D', 'E', 'F']})

result = pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))

print(result)

```

输出结果为:

```

key value_left value_right

0 B 2 5

1 D 4 6

```

六、总结

本文主要介绍了如何使用pandas.merge()函数进行数据集合并。我们从基本语法、连接方式、连接键、多列连接以及重复列名等多个角度进行了分析。通过本文的学习,相信大家已经掌握了如何使用pandas.merge()函数进行数据集合并的基本方法和技巧。

TOP 10
  • 周排行
  • 月排行