Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Pandas 合并将产生重复的列_Pandas_Merge_Duplicates - Fatal编程技术网

Pandas 合并将产生重复的列

Pandas 合并将产生重复的列,pandas,merge,duplicates,Pandas,Merge,Duplicates,上面的代码定义了两个数据帧对象。我想使用n1中的“zhanghui”字段和n2中的“zhanghui_x”字段作为合并n1和n2的字段,所以我的代码如下: n1 = DataFrame({'zhanghui':[1,2,3,4] , 'wudi':[17,'gx',356,23] ,'sas'[234,51,354,123] }) n2 = DataFrame({'zhanghui_x':[1,2,3,5] , 'wudi':[17,23,'sd',23] ,'wudi_x':[17,23,'

上面的代码定义了两个数据帧对象。我想使用n1中的“zhanghui”字段和n2中的“zhanghui_x”字段作为合并n1和n2的字段,所以我的代码如下:

n1 = DataFrame({'zhanghui':[1,2,3,4] , 'wudi':[17,'gx',356,23] ,'sas'[234,51,354,123]  })
n2 = DataFrame({'zhanghui_x':[1,2,3,5] , 'wudi':[17,23,'sd',23] ,'wudi_x':[17,23,'x356',23] ,'wudi_y':[17,23,'y356',23] ,'ddd':[234,51,354,123]  })
cols_to_use = [i for i in list(n2.columns) if i not in list(n1.columns) ]
然后结果列如下所示:

n1.merge(n2,how = 'inner',left_on = 'zhanghui',right_on='zhanghui_x') 
出现了一些重复列,如“无敌x”、“无敌y”。
所以这是熊猫内部的问题,或者我对pd.merge有错误的用法?

你的方法是正确的,熊猫会在合并与原始标题重复的列后自动提供postscript,并提供postscript\u x、\u y等

您可以首先选择要合并的列并继续:

sas     wudi_x  zhanghui    ddd     wudi_y  wudi_x  wudi_y  zhanghui_x
结果列:

cols_to_use = n2.columns - n1.columns
n1.merge(n2[cols_to_use],how = 'inner',left_on = 'zhanghui',right_on='zhanghui_x') 
当我试图运行cols_to_use=n2.columns-n1.columns时,它给了我一个类型错误,如下所示:

sas wudi    zhanghui    ddd wudi_x  wudi_y  zhanghui_x
它工作得很好,结果列如下所示:

n1 = DataFrame({'zhanghui':[1,2,3,4] , 'wudi':[17,'gx',356,23] ,'sas'[234,51,354,123]  })
n2 = DataFrame({'zhanghui_x':[1,2,3,5] , 'wudi':[17,23,'sd',23] ,'wudi_x':[17,23,'x356',23] ,'wudi_y':[17,23,'y356',23] ,'ddd':[234,51,354,123]  })
cols_to_use = [i for i in list(n2.columns) if i not in list(n1.columns) ]
所以,@S Ringne的方法确实解决了我的问题

=============================================

Pandas只需添加诸如“_x”之类的后缀,就可以解决合并两个帧对象时重复列名的问题


但是,如果“a-column-name”+“ux”的名称形式出现在任一帧对象中,会发生什么情况?我以前认为它会检查“a-column-name”+“ux”的名称形式是否出现,但实际上熊猫没有这个检查

根据pandas文档,合并函数具有以下属性:

sas  wudi   zhanghui    ddd wudi_x  wudi_y  zhanghui_x
其中后缀表示要附加到“重叠”列的默认后缀字符串,默认值为“\x”和“\y”

我不确定我是否正确理解了你的后续问题,但是

案例1 如果第一个数据框有“column_name_x”列,第二个数据框有“column_name”列,则没有重叠列,因此没有附加后缀

案例2 如果第一个数据框有“column_name”、“column_name_x”列,而第二个数据框也有“column_name”列,则默认后缀会附加到重叠列上,因此第一个数据框的“column_name”变为“column_name_x”,并导致现有列的重复


但是,您可以将None值传递给onenot all后缀,以确保某些数据帧的列名保持原样。

请发布所需的输出,这是预期的行为,因为您的行值不同,因此它会将冲突的值作为新的x和y列进行预处理