Pandas合并两个没有列的DataFrame

时间:2017-08-02 01:58:50

标签: python sql pandas csv left-join

上下文

我试图将两个大的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。我如何通过熊猫实现这一目标?

使用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 个答案:

答案 0 :(得分:4)

您可以先通过标签访问相关的数据框列(例如df_a[['EntityNum', 'foo']],然后加入这些列。

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

请注意merge的默认行为是进行内部联接。

答案 1 :(得分:0)

注意在SQL中,首先进行连接,然后选择所需的列。本着同样的精神,您可以在Pandas中完全加入,然后选择想要的列。

或者,执行完全加入和del您不想要的列。

最后,您可以先选择您的列,然后再进行连接。