【问题标题】:find duplicates in a column from a given list从给定列表的列中查找重复项
【发布时间】:2020-08-16 03:29:50
【问题描述】:

示例 csv 如下所示:

    name,id
    row1,1
    row2,2
    row3,3
    custom,test
    custom,test2
    row1,4

我为要检查重复项的每一行定义了一个字符串数组nameRows = ['row1', 'row2', 'row3']。如何仅在“名称”列下检查 nameRows 中的行是否重复?并忽略其他重复行,例如“自定义”。我只想要一个打印语句,上面写着 print('{0} is a duplicate row in the name column'.format(row))

半相关,我目前正在使用它来在 name 列下存在非常需要的行,也许我可以使用相同的 for 循环来查找错误...?

for row in nameRows:
    if row not in df['name'].values:
        print("Required {0} row 'name' not found in the csv file.".format(row))

【问题讨论】:

    标签: python python-3.x pandas csv


    【解决方案1】:

    选项 1

    nameRows = ['row1', 'row2', 'row3']
    
    for row in nameRows:
        if len(df[df['name'].str.contains(row , na=False)]) > 1:
           print(f'Row {row} is duplicate')
    

    选项 2

    nameRows = ['row1', 'row2', 'row3']
    
    for row in nameRows:
        if len(df[df['name'] == row]) > 1:
           print(f'Row {row} is duplicate')
    

    如果您想反过来,请使用 not 条件。

    【讨论】:

    • 我尝试了选项 2(没有尝试选项 1)并且成功了。谢谢!你能简单地向我解释一下它是如何工作的吗? (我还是个新手)
    • 基本思想是过滤具有nameRows列表中提到的值的行,然后检查序列的长度。如果长度大于一,那么我们可以说有重复的行。希望这能给你逻辑背后的直觉。
    【解决方案2】:

    使用isinduplicated 制作面具

    msk=df.name.duplicated(keep='last') & df.name.isin(nameRows)
    s=df[msk].name
    
    print(s)
    
    0    row1
    Name: name, dtype: object
    

    并根据需要打印:

    for row in s:
        print(f'{row} is duplicated')
    
    >>>row1 is duplicated
    

    【讨论】:

      【解决方案3】:

      你可以用

      分割你的df
      mask = df.name.isin(nameRows) # boolean mask
      check = df.loc[mask, :]
      nocheck = df.loc[~mask, :]
      

      然后删除重复并连接回来

      df = pd.concat([
          check.drop_duplicates(subset=['name'], inplace=True),
          nocheck], ignore_index=True)
      

      并找出哪些名称不在数据框中

      not_found = list(set(nameRows) - set(df.names))
          
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-17
        • 2021-01-23
        • 2022-01-11
        • 2013-02-21
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        相关资源
        最近更新 更多