【问题标题】:Python/Panda - merge csv according to join table/csvPython/Panda - 根据连接表/csv 合并 csv
【发布时间】:2018-08-14 03:57:34
【问题描述】:

我在合并 2 个 csv 文件时遇到问题。我有 2 个文件,其中包含多列数据,包括唯一 ID,另一个文件将文件 1 的 ID 映射到文件 2 的 ID。所以我基本上有一个 .

现在我想创建一个新的 csv 文件,其中根据我的连接 csv 中的 id 映射连接文件 1 和 2 中的数据。

以下是我的数据外观示例:

CSV1-客户

ID, Name, Lastname
1,  Peter, Pan
2,  Hank,  Tank

CSV2-地址

ID, Street, State
5,  Mainstr, US
7,  H Blvd,  DE

加入-CSV:

CID, AID
1,   5
2,   7

我想要什么:

ID, Name, Lastname, Street, State
    1,  Peter, Pan,  Mainstr, US
    2,  Hank,  Tank  H Blvd,  DE

非常感谢帮助或提供如何使用 python / panda 解决此问题的示例。

【问题讨论】:

    标签: python pandas csv data-structures


    【解决方案1】:

    read_csv 用于带有双merge 的DataFrame,最后通过drop 删除不必要的列:

    df1 = pd.read_csv(file1)
    df2 = pd.read_csv(file2)
    df3 = pd.read_csv(file3)
    
    df = (df3.merge(df1, left_on='CID', right_on='ID')
             .merge(df2, left_on='AID', right_on='ID', suffixes=('','_'))
             .drop(['CID','AID','ID_'], axis=1))
    print (df)
       ID   Name Lastname   Street State
    0   1  Peter      Pan  Mainstr    US
    1   2   Hank     Tank   H Blvd    DE
    

    【讨论】:

    • 感谢您的快速回答!但是,在“ID”的第一次合并时,我收到了一个关键错误。只是为了我的理解:left_on 是连接表中的键,right_on 是源表中的键,对吗?
    • @JohnnyKonfetti - 检查列名,print (df1.columns.tolist())
    • df1 现在可以工作,但在 df3 连接表中,标题列表只是 1 个字符串而不是多个字符串。
    • @JohnnyKonfetti - csv3 中的分隔符是什么?
    • @JohnnyKonfetti - 最简单的是pd.read_csv("df3.csv", sep=';')
    猜你喜欢
    • 2016-07-02
    • 2021-04-28
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2020-12-18
    • 2020-09-03
    • 2018-01-25
    • 2021-10-24
    相关资源
    最近更新 更多