迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

根据索引合并 Pandas DataFrame

作者:迹忆客 最近更新:2024/04/20 浏览次数:

在数据科学和机器学习的世界里,必须熟练掌握组织、维护和清理数据以便进一步分析的操作。合并两个 DataFrames 就是这样一个操作的例子。事实证明,使用 Python 中的 Pandas 库很容易合并两个 DataFrames。

Pandas 为我们提供了两个有用的函数,merge() 和 join() 来合并两个 DataFrames。这两种方法非常相似,但 merge() 被认为更通用、更灵活。它还提供了许多参数来改变最终 DataFrame 的行为。join() 将两个 DataFrame 合并在它们的索引上,而 merge() 允许我们指定可以作为键的列来合并两个 DataFrame。

这两个函数的一个共同参数是 how,它定义了连接的类型。默认情况下,how 参数对于 merge() 来说是 inner,对于 join() 来说是 left,但对于这两个函数来说,它可以被改为 leftrightinnerouter。了解它们之间的区别是很有必要的。

在合并两个 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_indexright_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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

计算 Pandas DataFrame 列的数量

发布时间:2024/04/20 浏览次数:113 分类:Python

本教程解释了如何使用各种方法计算 Pandas DataFrame 的列数,例如使用 shape 属性、列属性、使用类型转换和使用 info() 方法。

更改 Pandas DataFrame 列的顺序

发布时间:2024/04/20 浏览次数:116 分类:Python

在这篇文章中,我们将介绍如何使用 python pandas DataFrame 来更改列的顺序。在 pandas 中,使用 Python 中的 reindex() 方法重新排序或重新排列列。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便