当前位置: 首页 > 知识库问答 >
问题:

熊猫中merge()和concat()之间的差异

芮明知
2023-03-14

pd之间的本质区别是什么。数据帧。合并()pd。concat()

到目前为止,这是我发现的,请评论我的理解是否完整和准确:

>

  • . merg()只能使用列(加上行索引),并且它在语义上适合于数据库风格的操作。. conat()可以与任一轴一起使用,只使用索引,并且提供了添加一个分级索引。

    顺便说一下,这允许以下冗余:两者都可以使用行索引组合两个数据帧。

    pd。数据帧。join()只提供了用例子集的简写。merge()

    (Pandas擅长处理数据分析中非常广泛的用例。探索文档以找出执行特定任务的最佳方式可能有点令人生畏。)

  • 共有3个答案

    廖弘伟
    2023-03-14

    pd。concatIterable作为其参数。因此,它不能将DataFrames直接作为其参数。此外,DataFrame维度s在连接时应沿轴匹配。

    pd.merge可以以DataFrames作为参数,用于将两个DataFrames与相同的列或索引组合在一起,这不能用pd.concat来完成它将在DataFrame中显示重复的列。

    而连接可以用于连接两个具有不同索引的DataFrame

    邢起运
    2023-03-14

    在高级别:

    • 。concat()只需将多个数据帧垂直堆叠在一起,或在索引上对齐后水平缝合

    更具体地说,。concat()

    • 是一个顶级的熊猫功能
    • 合并两个或多个熊猫DataFrame垂直或水平
    • 水平组合时仅在索引上对齐
    • 当任何DataFrame包含重复索引时出错。
    • 默认外部连接选项为内连接

    。merge()

    • 作为顶级pandas函数和数据帧方法存在(从pandas 1.0开始)
    • 在水平方向上正好组合两个数据帧
    • 将调用的数据帧的列或索引与另一个数据帧的列或索引对齐
    • 通过执行笛卡尔乘积处理连接列或索引上的重复值
    • 默认为“内部联接”,带有左、外和右选项

    请注意,当执行pd.merge(左,右)时,如果有两行包含来自连接列或索引的相同值,则每行将与的相应行组合在笛卡尔产品中。另一方面,如果使用. concat()来组合列,我们需要确保DataFrame中没有重复的索引。

    实际上:

    • 考虑。CONTAUTE(<)/代码>在合并同名<代码>数据文件< /代码>时,同时考虑<代码>。合并()在合并互补的数据帧时首先合并

    参考:熊猫1. x食谱

    赵元白
    2023-03-14

    一个非常高的级别差异是,merge()用于根据公共列的值组合两个(或多个)数据帧(也可以使用索引,使用left_index=True和/或right_index=True),并且concat()用于将一个(或多个)数据帧一个附加到另一个数据帧的下面(或侧向,取决于轴选项设置为0还是1)。

    join()用于根据索引合并2个数据帧;我们可以使用join(),而不是使用带有选项left\u index=Truemerge()

    例如:

    df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
    
    df1:
       Key  data1
    0   b   0
    1   b   1
    2   a   2
    3   c   3
    4   a   4
    5   a   5
    6   b   6
    
    df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)})
    
    df2:
        Key data2
    0   a   0
    1   b   1
    2   d   2
    
    #Merge
    # The 2 dataframes are merged on the basis of values in column "Key" as it is 
    # a common column in 2 dataframes
    
    pd.merge(df1, df2)
    
       Key data1 data2
    0   b    0    1
    1   b    1    1
    2   b    6    1
    3   a    2    0
    4   a    4    0
    5   a    5    0
    
    #Concat
    # df2 dataframe is appended at the bottom of df1 
    
    pd.concat([df1, df2])
    
       Key data1 data2
    0   b   0     NaN
    1   b   1     NaN
    2   a   2     NaN
    3   c   3     NaN
    4   a   4     NaN
    5   a   5     NaN
    6   b   6     NaN
    0   a   Nan   0
    1   b   Nan   1
    2   d   Nan   2
    
     类似资料:
    • 在Lodash库中,是否有人可以更好地解释合并和扩展/分配。 这是一个简单的问题,但我还是没有回答。

    • 问题内容: 我有一个4个熊猫数据框的列表,其中包含我想合并为一个数据框的一天的报价数据。我无法理解concat在时间戳上的行为。请参阅以下详细信息: 使用我得到: 使用我得到: 注意使用时索引如何变化。为什么会发生这种情况,我将如何使用该方法来重现使用所获得的结果?(因为看上去快得多;每个循环24.6 ms,而每个循环3.02 s) 问题答案: 因此,您正在执行的操作是append和concat

    • 问题内容: 我正在尝试对数据框进行列绑定并遇到pandas的问题,因为它似乎不起作用: 结果是 即使我使用重置索引 然后尝试 它仍然产生相同的结果! 问题答案: 如果我正确理解您的意思,这就是您想要做的。 这使: 实际上,我期望得到相同的结果。 这是 jreback 的出色解释: “忽略”,表示未在连接轴上对齐。它只是按照传递的顺序将它们粘贴在一起,然后为实际索引(例如)重新分配一个范围,因此联接

    • 问题内容: 如果我只是通过类似下面的函数,DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)是否有任何区别 因为返回值看起来几乎一样。并且文档仅告诉: apply()-> apply:Series或DataFrame 聚合()->聚合:DataFrame 问题答案: agg有两种版本(aggregate的缩写)和适用:第一个版本在groupby

    • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

    • 问题内容: Numpy似乎在和类型之间进行了区分。例如我可以做:: 其中dtype(’S’)和dtype(’O’)分别对应于和。 但是熊猫似乎就缺少了区分,并要挟到。:: 强制类型也无济于事。:: 此行为有任何解释吗? 问题答案: Numpy的字符串dtypes不是python字符串。 因此,故意使用本机python字符串,这需要对象dtype。 首先,让我演示一下numpy的字符串与众不同的含义