📅  最后修改于: 2023-12-03 15:37:10.166000             🧑  作者: Mango
当我们需要合并两个数据集时,很容易遇到不同列(col)的情况。 在某些情况下,我们可能会希望合并这些数据并保留所有数据,而不只是与相应行匹配的数据。 这就是“合并而不会丢失不匹配 col 的数据”的情况。
下面是一个示例数据集,我们将其称为df1:
| ID | Value1 | Value2 |
|----|--------|--------|
| 1 | 4.5 | 7 |
| 2 | 6 | 8 |
| 3 | 5.5 | 9 |
| 4 | 9 | 3 |
我们还有一个名为df2的数据集,它与df1具有不同的列:
| ID | Value3 |
|----|--------|
| 1 | 4.5 |
| 2 | 6 |
| 5 | 8.2 |
| 6 | 9.1 |
我们想要将这两个数据集合并成一个,但我们希望保留不匹配列的所有数据。这意味着,我们需要合并后存在缺失值的行(符合条件非缺失值)。
我们可以使用 Pandas 包中的merge()函数完成此操作:
import pandas as pd
df1 = pd.DataFrame({'ID': ['1', '2', '3', '4'],
'Value1': [4.5, 6, 5.5, 9],
'Value2': [7, 8, 9, 3]})
df2 = pd.DataFrame({'ID': ['1', '2', '5', '6'],
'Value3': [4.5, 6, 8.2, 9.1]})
merged = pd.merge(df1, df2, on='ID', how='outer')
在这里,我们将 df1 和 df2 使用列“ID”进行外连接,以保留每个数据集中所有行。 使用outer参数定义进行外连接, 连接方式为保留两个数据集的全部行/列,只不过缺失数据为NaN。
合并后输出的结果如下:
| ID | Value1 | Value2 | Value3 |
|----|-------|-------|-------|
| 1 | 4.5 | 7 | 4.5 |
| 2 | 6 | 8 | 6 |
| 3 | 5.5 | 9 | NaN |
| 4 | 9 | 3 | NaN |
| 5 | NaN | NaN | 8.2 |
| 6 | NaN | NaN | 9.1 |
如预期,合并后的结果保留了每个数据集中所有行,而不仅仅是匹配的行。 并且没匹配的区域 NaN 的数据被正确地显示出来了。
因此,我们可以通过使用外连接的合并方法,合并两个数据集并保留不匹配列的数据。