python – 如果左右df的键不同,pandas merge会做奇怪的工作
发布时间:2020-12-20 13:16:41 所属栏目:Python 来源:网络整理
导读:我发现如果左右键的索引不同,pandas merge方法会很奇怪. 例如,我定义左右数据帧如下 left_df 0 1 2 3 4 50 1 2 1 2 3 41 2 3 2 3 4 52 1 2 3 4 5 63 2 2 4 5 6 74 2 3 5 6 7 8 right_df 0 1 2 3 4 50 1 2 3 4 5 61 1 2 3 4 5 72 2 3 4 5 6 73 2 3 4 5 6 8 并
我发现如果左右键的索引不同,pandas merge方法会很奇怪.
例如,我定义左右数据帧如下 left_df 0 1 2 3 4 5 0 1 2 1 2 3 4 1 2 3 2 3 4 5 2 1 2 3 4 5 6 3 2 2 4 5 6 7 4 2 3 5 6 7 8 right_df 0 1 2 3 4 5 0 1 2 3 4 5 6 1 1 2 3 4 5 7 2 2 3 4 5 6 7 3 2 3 4 5 6 8 并使用一些参数合并作业, pd.merge(left_df,right_df,how="inner",left_on = [0,1],right_on=[0,indicator=False) 结果找到了预期的结果. 0 1 2_x 3_x 4_x 5_x 2_y 3_y 4_y 5_y 0 1 2 1 2 3 4 3 4 5 6 1 1 2 1 2 3 4 3 4 5 7 2 1 2 3 4 5 6 3 4 5 6 3 1 2 3 4 5 6 3 4 5 7 4 2 3 2 3 4 5 4 5 6 7 5 2 3 2 3 4 5 4 5 6 8 6 2 3 5 6 7 8 4 5 6 7 7 2 3 5 6 7 8 4 5 6 8 但是如果我设置left_on和right_on params不同,结果会变得非常奇怪,如下所示. merge job with '1,2' left key index pd.merge(left_df,left_on = [1,2],indicator=False) 1 2 0_x 1_x 2_x 3_x 4_x 5_x 0_y 1_y 2_y 3_y 4_y 5_y 0 2 3 1 2 3 4 5 6 2 3 4 5 6 7 1 2 3 1 2 3 4 5 6 2 3 4 5 6 8 ^ ^ ^ ^ these columns are duplicated. 0_x 1 2 3_x 4_x 5_x 2_y 3_y 4_y 5_y 0 1 2 3 4 5 6 4 5 6 7 1 1 2 3 4 5 6 4 5 6 8 this is what I expected. (keys of each df are removed.) 有什么参数或方法可以解决上面奇怪的工作吗? 解决方法
我想知道我提到的奇怪结果的情况,所以我把自己的假设分成两个案例.
>每个键的列名不同时 通过一些测试用例,我可以弄清楚当每个键的列名不同时,结果不太好. 所以这个问题可以很容易地处理chaning列名. left_df 0 key0 key1 3 4 5 0 1 2 1 2 3 4 1 2 3 2 3 4 5 2 1 2 3 4 5 6 3 2 2 4 5 6 7 4 2 3 5 6 7 8 right_df key0 key1 2 3 4 5 0 1 2 3 4 5 6 1 1 2 3 4 5 7 2 2 3 4 5 6 7 3 2 3 4 5 6 8 result 0 key0 key1 3_x 4_x 5_x 2 3_y 4_y 5_y 0 1 2 3 4 5 6 4 5 6 7 1 1 2 3 4 5 6 4 5 6 8 以下是简单的代码实现. key_entry = [] for i in range(len([1,2])): key_entry.append('key' + str(i)) left_rename_map = {} for i,each in zip([1,key_entry): left_rename_map[i] = each right_rename_map = {} for i,each in zip([0,key_entry): right_rename_map[i] = each df1 = df1.rename(columns=left_rename_map) df2 = df2.rename(columns=right_rename_map) 在我看来,Pandas尝试保存所有列信息(在本例中为列名).因此,如果键的列名不同,Pandas认为该列不相同,并且虽然每个值都与列相同,但它不会删除键列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |