【问题标题】:Output CSV row only if 2 columns in 2 csv files match with Python-Pandas仅当 2 个 csv 文件中的 2 列与 Python-Pandas 匹配时才输出 CSV 行
【发布时间】:2022-01-05 15:36:49
【问题描述】:

Python 新手。我有 2 个 csv 文件,它们都有学生姓氏和学生名字(Re-enrolledonline.csv 和 currentschoolroster.csv - 列数和列标题不同,但两个文件都包含此信息)。然后,我需要创建一个 CSV,其中包含在 Re-enrolledonline.csv 中未找到但在 currentschoolroster.csv 中的学生列表。我可以用下面的代码匹配一列而不会出现问题,但我似乎找不到一个很好的资源来说明如何只在名字和姓氏列都匹配的情况下写入新文件。

谢谢!


import pandas as pd



f1 = pd.read_csv('/users/Desktop/CompareFiles/currentschoolroster.csv')
f2 = pd.read_csv('/users/Desktop/CompareFiles/Re-enrolledonline.csv')

notmatched = f1[~f1.Last_Name.isin(f2.StudentLastName)]

notmatched.to_csv('/users/Desktop/CompareFiles/notmatched.csv')

【问题讨论】:

    标签: python pandas csv compare


    【解决方案1】:

    Pandas 在索引中使用& 表示| 表示https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#boolean-indexing

    应该没问题:

    notmatched = f1[~f1.Last_Name.isin(f2.StudentLastName) \
                    & (~f1.First_Name.isin(f2.StudentFirstName))]
    
    

    PS。请注意,如果 CSV 很大,isin() 会很慢。

    【讨论】:

    • 所以我有点过分了。它会查找重复的姓氏,然后查找重复的名字,但它不会每行查找这些内容。所以我的匹配文件排除了所有共享姓氏的学生,然后还删除了所有共享名字但与给定行中的名字和姓氏不匹配的学生。
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多