根据索引合并 Pandas DataFrame
在数据科学和机器学习的世界里,必须熟练掌握组织、维护和清理数据以便进一步分析的操作。合并两个 DataFrames 就是这样一个操作的例子。事实证明,使用 Python 中的 Pandas 库很容易合并两个 DataFrames。
Pandas 为我们提供了两个有用的函数,merge() 和 join()
来合并两个 DataFrames。这两种方法非常相似,但 merge()
被认为更通用、更灵活。它还提供了许多参数来改变最终 DataFrame 的行为。join()
将两个 DataFrame 合并在它们的索引上,而 merge()
允许我们指定可以作为键的列来合并两个 DataFrame。
这两个函数的一个共同参数是 how
,它定义了连接的类型。默认情况下,how
参数对于 merge()
来说是 inner
,对于 join()
来说是 left
,但对于这两个函数来说,它可以被改为 left
、right
、inner
和 outer
。了解它们之间的区别是很有必要的。
在合并两个 Pandas DataFrames 时,我们假设一个是左 DataFrame,另一个是右 DataFrame。merge()
和 join()
都是对关键列的记录进行匹配。inner
连接返回一个由两个 DataFrame 中匹配的记录组成的 DataFrame。outer
连接产生一个合并的 DataFrame,包含两个 DataFrame 中的所有元素,填充两边缺失值的 NaN。left
连接包含左边 DataFrame 的所有元素,但只包含右边 DataFrame 的匹配记录。与 left
相反的是 right
,它包含右 DataFrame 的所有元素,只包含左 DataFrame 的匹配记录。所有这些都将在接下来的示例代码中更加清晰,我们将在下面的代码中组合 DataFrame。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
print(df1)
print(df2)
输出:
C1
1 a
2 b
4 d
5 e
7 h
C2
1 AA
2 BB
3 CC
5 EE
6 FF
使用 merge()
合并索引上的两个 Pandas DataFrame
当合并两个 DataFrames 的索引时,merge()
函数的 left_index
和 right_index
参数的值应该是 True
。下面的代码示例将合并两个 DataFrames,加入类型为 inner
。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_inner = df1.merge(df2, how="inner", left_index=True, right_index=True)
print(df_inner)
输出:
C1 C2
1 a AA
2 b BB
5 e EE
下面的代码将合并连接类型为 outer
的 DataFrames。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.merge(df2, how="outer", left_index=True, right_index=True)
print(df_outer)
输出:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
正如你所看到的,合并后的 DataFrame 的连接类型为 inner
,只有来自两个 DataFrame 的匹配记录,而连接类型为 outer
的 DataFrame 拥有所有的元素,用 NaN
来填充缺失的记录。现在使用左连接。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_left = df1.merge(df2, how="left", left_index=True, right_index=True)
print(df_left)
输出:
C1 C2
1 a AA
2 b BB
4 d NaN
5 e EE
7 h NaN
上述合并后的 DataFrame 拥有左侧 DataFrame 中的所有元素,只有右边 DataFrame 中的匹配记录。与之完全相反的是右连接,如下图所示。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_right = df1.merge(df2, how="right", left_index=True, right_index=True)
print(df_right)
输出:
C1 C2
1 a AA
2 b BB
3 NaN CC
5 e EE
6 NaN FF
使用 join()
来合并索引上的两个 Pandas DataFrame
join()
方法根据两个 DataFrame 的索引将其合并,默认情况下,连接类型是 left
。它总是使用右侧 DataFrame 的索引,但我们可以为左侧 DataFrame 提键。我们可以为 join()
函数指定连接类型,就像我们为 merge()
函数指定的一样。
下面的例子显示了合并后的 DataFrame 的 outer
连接类型。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.join(df2, how="outer")
print(df_outer)
输出:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
相关文章
将 Pandas DataFrame 转换为 Spark DataFrame
发布时间:2024/04/20 浏览次数:169 分类:Python
-
本教程将讨论将 Pandas DataFrame 转换为 Spark DataFrame 的不同方法。
将 Pandas DataFrame 导出到 Excel 文件
发布时间:2024/04/20 浏览次数:164 分类:Python
-
本教程介绍了有关如何将 Pandas DataFrame 导出到 excel 文件的各种方法
将 Lambda 函数应用于 Pandas DataFrame
发布时间:2024/04/20 浏览次数:113 分类:Python
-
本指南说明如何使用 DataFrame.assign() 和 DataFrame.apply() 方法将 Lambda 函数应用于 pandas DataFrame。
计算 Pandas 中两个 DataFrame 之间的交叉连接
发布时间:2024/04/20 浏览次数:114 分类:Python
-
本教程解释了如何在 Pandas 中计算两个 DataFrame 之间的交叉连接。
计算 Pandas DataFrame 列的数量
发布时间:2024/04/20 浏览次数:113 分类:Python
-
本教程解释了如何使用各种方法计算 Pandas DataFrame 的列数,例如使用 shape 属性、列属性、使用类型转换和使用 info() 方法。
更改 Pandas DataFrame 列的顺序
发布时间:2024/04/20 浏览次数:116 分类:Python
-
在这篇文章中,我们将介绍如何使用 python pandas DataFrame 来更改列的顺序。在 pandas 中,使用 Python 中的 reindex() 方法重新排序或重新排列列。
从 Pandas DataFrame 系列中获取列表
发布时间:2024/04/20 浏览次数:136 分类:Python
-
本文将讨论如何使用 tolist 方法从 Pandas DataFrame 系列中获取列表,并探索 Pandas DataFrame 结构。