Pandas中merge()和concat()的区别

2024-05-19 14:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

pd.DataFrame.merge()pd.concat()之间有什么本质区别?

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

  • .merge()只能使用列(加上行索引),并且在语义上适合于数据库样式的操作。.concat()可以与任一轴一起使用,只使用索引,并提供添加层次索引的选项。

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

  • pd.DataFrame.join()只提供了.merge()用例子集的简写

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


Tags: 数据数据库dataframepandas选项评论样式merge
3条回答

pd.concatIterable作为参数。因此,它不能将DataFrames直接作为参数。连接时,{}的{}s也应沿轴匹配。

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

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

I am currently trying to understand the essential difference(s) between pd.DataFrame.merge() and pd.concat().

好问题。主要区别在于:

^{}可在两个轴上工作。

另一个区别是,pd.concat具有内部默认值外部连接,而^{}具有外部内部默认连接。

第三个值得注意的区别是:pd.DataFrame.merge()在合并同名列时可以选择设置列后缀,而对于pd.concat这是不可能的。


使用pd.concat默认情况下,您可以堆叠多个数据帧(axis=0)的行,并且当您设置axis=1时,您可以模拟pd.DataFrame.merge()函数。

一些有用的pd.concat示例:

df2=pd.concat([df]*2, ignore_index=True) #double the rows of a dataframe

df2=pd.concat([df, df.iloc[[0]]]) # add first row to the end

df3=pd.concat([df1,df2], join='inner', ignore_index=True) # concat two df's

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

join()用于在索引的基础上合并2个数据帧;而不是使用merge()与选项left_index=True一起使用join()

例如:

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

相关问题 更多 >