Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';pd.concat([df1,df2],join=';outer';)'';df1.先组合(df2)和#x27';pd.合并(df1、df2)和#x27;和';df1.join(df2,how=';outer';)';?_Python_Pandas_Dataframe_Join_Concatenation - Fatal编程技术网

Python ';pd.concat([df1,df2],join=';outer';)'';df1.先组合(df2)和#x27';pd.合并(df1、df2)和#x27;和';df1.join(df2,how=';outer';)';?

Python ';pd.concat([df1,df2],join=';outer';)'';df1.先组合(df2)和#x27';pd.合并(df1、df2)和#x27;和';df1.join(df2,how=';outer';)';?,python,pandas,dataframe,join,concatenation,Python,Pandas,Dataframe,Join,Concatenation,假设我有以下两个数据帧: import pandas as pd A = [174,-155,-931,301] B = [943,847,510,16] C = [325,914,501,884] D = [-956,318,319,-83] E = [767,814,43,-116] F = [110,-784,-726,37] G = [-41,964,-67,-207] H = [-555,787,764,-788] df1 = pd.DataFrame({"A": A, "B":

假设我有以下两个数据帧:

import pandas as pd

A = [174,-155,-931,301]
B = [943,847,510,16]
C = [325,914,501,884]
D = [-956,318,319,-83]

E = [767,814,43,-116]
F = [110,-784,-726,37]
G = [-41,964,-67,-207]
H = [-555,787,764,-788]

df1 = pd.DataFrame({"A": A, "B": B, "C": C, "D": D})
df2 = pd.DataFrame({"E": E, "B": F, "C": G, "D": H})
如果使用
join=outer
执行
concat
,则会得到以下结果数据帧:

pd.concat([data1,data2], join='outer')

如果我执行
df1.combines_first(df2)
,我会得到以下结果:

df1.set_index('B').combine_first(df2.set_index('B')).reset_index()
df1.join(df2, how='outer', on='B', lsuffix='_left', rsuffix='_right')

如果我做了
pd.merge(df1,df2)
,我得到的结果与
concat产生的结果相同:

pd.merge(data1, data2, on=['B','C','D'], how='outer')

最后,如果我执行
df1.join(df2,how='outer')
,我会得到以下结果:

df1.set_index('B').combine_first(df2.set_index('B')).reset_index()
df1.join(df2, how='outer', on='B', lsuffix='_left', rsuffix='_right')

我不完全理解每种方法如何以及为什么会产生不同的结果。

沿着给定的轴将一个数据帧附加到另一个数据帧上(默认的axix=0表示沿着索引合并,即将其他数据帧放在给定的数据帧下)。数据在另一个轴上对齐(即,对于默认设置“对齐列”)。这就是为什么我们在不匹配的列“A”和“E”中得到NaN

用其他数据帧中的现有值替换数据帧中的NAN,其中行和列被合并(来自两个数据帧的行和列的并集)。在您的示例中,从一开始就没有缺失值,但由于联合操作,它们会出现,因为您的索引没有公共项。行的顺序由排序后的组合索引(df1.B和df2.B)生成。
因此,如果数据帧中没有缺失值,通常不会首先使用combine_

是一种数据库样式,由两个数据帧组合而成,提供了比concat更多的合并选项(左、右、特定列)。在您的示例中,结果的数据是相同的,但concat和merge之间的索引存在差异:在列上合并时,将忽略dataframe索引,并创建一个新索引


合并df1索引上的df1和df2,以及df2给定列(在示例“B”中)。在您的示例中,这与pd.merge(df1,df2,left_on=df1.index,right_on='B',how='outer',后缀=('u left','u right'))相同。
。由于df1的索引和df2的“B”列之间不匹配,因此由于外部联接,将出现大量的NAN。

这是否回答了您的问题@LazyCoder没有完全回答,没有。因为你发布的问题只问了
merge
vs
concat
,而我的问题除了
merge
vs
concat
之外,还问了
join
vs
combine\u first
。你问了很多问题。如果你不知道它们是什么,你为什么要问“区别”?——找出它们各自是什么。如果你认为你知道它们是什么,你为什么需要“差异”——这到底是什么意思?无论哪种方式,给出定义,展示并应用研究,并提出一个明确的、具体的、不重复的问题,说明你是如何陷入某一特定点的。请仅将图像用于不能表示为文本或扩充文本的内容。包括带有图像的图例/图例和说明。