使用Pandas合并两个数据框时排除某些列

6

背景

我正在尝试合并两个大的CSV文件。

问题

假设我有一个像下面这样的Pandas DataFrame...

EntityNum    foo   ...
------------------------
1001.01      100
1002.02       50
1003.03      200

还有一个类似这样的...

EntityNum    a_col    b_col
-----------------------------------
1001.01      alice        7  
1002.02        bob        8
1003.03        777        9

我很愿意像这样加入他们:
EntityNum    foo    a_col
----------------------------
1001.01      100    alice
1002.02       50      bob
1003.03      200      777

记住,最终结果中不需要b_col。我该如何使用Pandas完成这个任务?
使用SQL,我可能会这样做:
SELECT t1.*, t2.a_col FROM table_1 as t1
                      LEFT JOIN table_2 as t2
                      ON t1.EntityNum = t2.EntityNum; 

搜索

我知道可以使用合并。这是我尝试过的:

import pandas as pd

df_a = pd.read_csv(path_a, sep=',')
df_b = pd.read_csv(path_b, sep=',')
df_c = pd.merge(df_a, df_b, on='EntityNumber')

但是当我试图避免一些不需要的列出现在最终数据框中时,我遇到了困难。

2个回答

12

您可以首先通过它们的标签访问相关数据帧列(例如df_a[['EntityNum', 'foo']]),然后再进行连接。

df_a[['EntityNum', 'foo']].merge(df_b[['EntityNum', 'a_col']], on='EntityNum', how='left')

请注意,merge 的默认行为是执行内连接。


0
请注意,在 SQL 中,您首先执行连接操作,然后选择所需的列。在同样的精神下,您可以在 Pandas 中执行完整的连接,然后选择所需的列。
或者,进行完整的连接,然后使用 del 删除不需要的列。
最后,您可以先选择您想要的列,然后再执行连接操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接