Pandas 如何将两个数据框左右合并

Pandas 如何将两个数据框左右合并

在本文中,我们将介绍Pandas中如何将两个数据框左右合并。

在日常数据处理的工作中,有时候需要将两个数据框合并,以便于后续的分析和统计。这时候,我们可以使用Pandas中的merge函数来完成数据框的合并操作。下面,我们将结合实例来介绍数据框的合并方法。

阅读更多:Pandas 教程

实例说明

我们定义两个数据框df1和df2,它们分别包含了两个州的人口数据:

import pandas as pd

data1 = {'State':['CA','CA','NY','NY'],
        'Year':[2016,2017,2016,2017],
        'Population':[38902587,39028270,19773580,19849399]}
df1 = pd.DataFrame(data1)

data2 = {'State':['CA','NY'],
        'Language':['English','Spanish']}
df2 = pd.DataFrame(data2)

我们现在需要把这两个数据框合并为一个新的数据框,其中df1作为左边的数据框,df2作为右边的数据框。我们将以loc函数为例,展示合并两个数据框的方法。loc函数是根据行标签和列标签来选择数据的,loc函数经常被用来对数据框进行数据操作。

merged_data = df1.merge(df2, on='State', how='left').\
    loc[:, ['State', 'Language', 'Year', 'Population']]

在这里,我们使用merge函数来合并这两个数据框,参数中”on”指定了合并的列名,”how”指定了合并的方式,这里采用的是左连接方式,即左边的数据框df1中所有的行都会被保留下来。最后,我们使用loc函数根据行和列来选择需要显示的数据。运行以上代码,合并后的数据框如下:

State Language Year Population
CA English 2016 38902587
CA English 2017 39028270
NY Spanish 2016 19773580
NY Spanish 2017 19849399

我们通过数据框的合并,成功地将两个数据框连接在了一起。

合并方式

Pandas中的merge函数提供了四种不同的合并方式,它们分别是:

  • 内连接(inner join)
  • 外连接(outer join)
  • 左连接(left join)
  • 右连接(right join)

内连接

内连接是将两个数据框按照共有的列合并。合并后的数据中只包含两个数据框中共有的行,没有的则会被删除,只会保留共同部分的数据。假如df1和df2中都包含State和Year两列数据,我们可以使用以下的方法进行内连接操作:

merged_data = pd.merge(df1, df2, on=['State', 'Year'], how='inner')

外连接

外连接是将两个数据框中的所有数据合并,并补充缺失的数据。如果左边的数据框或右边的数据框中缺少某些值时,这个值会在合并后的数据框中用”NaN”代替。当两个数据框中都有的值时,则在合并后的数据框中保留这个值。

merged_data = pd.merge(df1, df2, on='State', how='outer')

左连接

左连接只保留左侧数据框的所有数据,同时加入右侧数据框中匹配的数据项。右侧数据框中没有与左侧数据框匹配的数据项时,会自动用”NaN”代替。

merged_data = pd.merge(df1, df2, on='State', how='left') 

右连接

右连接只保留右侧数据框的所有数据,同时加入左侧数据框中匹配的数据项。左侧数据框中没有与右侧数据框匹配的数据项时,会自动用”NaN”代替。

merged_data = pd.merge(df1, df2, on='State', how='right')
```python


## 合并参数

除了上述的不同合并方式之外,我们还可以使用merge函数中的一些参数来进行更多的合并操作。

#### merge函数中的参数

- left_on:左侧数据框中用于合并的列名称。
- right_on:右侧数据框中用于合并的列名称。
- left_index和right_index:布尔值,分别指定左侧数据框和右侧数据框是否使用其索引作为合并的键。
- suffixes:长度为2的元组,用于指定相同列名的情况下保留不同的后缀名。
- sort:布尔值,指定合并后的数据框是否按照列名排序。
- copy:布尔值,当为False时,不会复制源数据框中的数据,否则会复制。

#### 实例说明

我们可以通过左连接和右连接来实现对数据框的连接操作。例如,我们在以下例子中,会使用left_on和right_on参数来合并数据框。在这个例子中,我们有两个数据框,分别包含了两个州的人口数据和语言数据。我们通过左连接和右连接来分别合并这两个数据框。

```python
data1 = {'State':['CA','CA','NY','NY'],
        'Year':[2016,2017,2016,2017],
        'Population':[38902587,39028270,19773580,19849399]}
df1 = pd.DataFrame(data1)

data2 = {'Category':['State', 'Language'],
         'Key':['CA','NY','English','Spanish']}
df2 = pd.DataFrame(data2)

merge_left = pd.merge(df1, df2, left_on='State', right_on='Key', how='left')
merge_right = pd.merge(df1, df2, left_on='State', right_on='Key', how='right')

print("左连接结果:\n", merge_left)
print("右连接结果:\n", merge_right)

执行后,可以得到以下的左连接结果和右连接结果:

左连接结果:
   State  Year  Population Category    Key
0    CA  2016    38902587    State     CA
1    CA  2017    39028270    State     CA
2    NY  2016    19773580    State     NY
3    NY  2017    19849399    State     NY
4    CA  2016    38902587  English  NY_CA
5    NY  2016    19773580  English  NY_CA
6    CA  2017    39028270      NaN    NaN
7    NY  2017    19849399      NaN    NaN

右连接结果:
     State    Year  Population Category    Key
0.0    CA  2016.0  38902587.0    State     CA
1.0    CA  2017.0  39028270.0    State     CA
2.0    NY  2016.0  19773580.0    State     NY
3.0    NY  2017.0  19849399.0    State     NY
4.0   NaN     NaN         NaN  English  NY_CA
5.0   NaN     NaN         NaN  Spanish  NY_CA

总结

上述就是Pandas中合并两个数据框的方法,我们可以使用merge函数实现不同的合并方式,并通过参数来对合并过程进行定制。合并数据框可以方便我们对数据进行分析和统计,使得数据分析工作更加高效。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程