如何在Pandas合并DataFrame时避免右表连接列出现在输出结果中?
解决Pandas合并后移除右表连接列的简洁方法
当然有更简便的方式!不用事后单独删除列,你可以通过几种链式操作或者预处理的方式一步到位得到目标结果,下面是几个常用方案:
方案1:合并前重命名右表连接列,统一连接键名
把df2的Name_child重命名为和df1一致的Name,这样合并时直接用on='Name',就不会生成重复的连接列:
import pandas as pd age = [['tom', 10], ['nick', 15], ['juli', 14]] df1 = pd.DataFrame(age, columns=['Name', 'Age']) toy = [['tom', 'GIJoe'], ['nick', 'car']] # 重命名后再合并 df2 = pd.DataFrame(toy, columns=['Name_child', 'Toy']).rename(columns={'Name_child': 'Name'}) df = pd.merge(df1, df2, on='Name', how='left')
此时df.columns就是你想要的Index(['Name', 'Age', 'Toy'], dtype='object'),全程无多余列生成。
方案2:合并后直接筛选目标列(链式调用)
如果不想修改原df2的结构,可以在合并完成后直接通过列索引筛选你需要的列,写成一行代码:
import pandas as pd age = [['tom', 10], ['nick', 15], ['juli', 14]] df1 = pd.DataFrame(age, columns=['Name', 'Age']) toy = [['tom', 'GIJoe'], ['nick', 'car']] df2 = pd.DataFrame(toy, columns=['Name_child', 'Toy']) # 合并后直接选择列 df = pd.merge(df1, df2, left_on='Name', right_on='Name_child', how='left')[['Name', 'Age', 'Toy']]
这种方式很直观,明确指定最终要保留的列,代码紧凑。
方案3:合并后链式调用drop移除多余列
和你原来的删除思路类似,但把删除操作和合并写在一行,更简洁:
import pandas as pd age = [['tom', 10], ['nick', 15], ['juli', 14]] df1 = pd.DataFrame(age, columns=['Name', 'Age']) toy = [['tom', 'GIJoe'], ['nick', 'car']] df2 = pd.DataFrame(toy, columns=['Name_child', 'Toy']) # 合并后立即drop多余列 df = pd.merge(df1, df2, left_on='Name', right_on='Name_child', how='left').drop('Name_child', axis=1)
这种方式不需要修改原数据结构,也省去了单独的del语句。
推荐优先用方案1或方案2,前者避免了多余列的生成,后者更清晰可控,根据你的实际场景选择就好~
内容的提问来源于stack exchange,提问作者koteletje
相关产品推荐
相关产品推荐

