簡體   English   中英

如何在 Python 中同時比較兩列 CSV?

[英]How to Compare two columns of CSV simultaneously in Python?

我有一個 csv 文件,其中包含一個包含兩列的巨大數據集。 我想比較這兩列的數據,如果存在重復的對,則將其刪除。 例如,如果我的數據文件看起來像這樣:

Column A             Column B
DIP-1N                  DIP-1N
DIP-2N                  DIP-3N
DIP-3N                  DIP-2N
DIP-4N                  DIP-5N

然后第一個條目被刪除,因為我不想要兩個“DIP-1N”。 此外,只要條目是唯一的,pair 的出現順序就不是問題。 例如,這里 DIP-2N & DIP-3N 和 DIP-3N & DIP-3N 是配對的。 但兩個條目的含義相同。 所以我想保留一個條目並刪除其余條目。

我編寫了以下代碼,但我不知道如何同時比較兩列的條目。

import csv
import pandas as pd

file = pd.read_csv("/home/staph.csv")
for i in range(len(file['Column A'])):
    for j in range(len(file['Column B'])):
        list1 = []
        list2 = []
        list1.append(file[file['Column A'].str.contains('DIP-'+str(i)+'N')])
        list2.append(file[file['Column B'].str.contains('DIP-'+str(i)+'N')])
        for ele1,ele2 in list1,list2:
            if(list1[ele1]==list2[ele2]):
                print("Duplicate")
            else:
                print("The 1st element is :", ele1)
                print("The 2nd element is :", ele2)

好像出了點問題,因為沒有輸出。 程序結束,沒有任何輸出或錯誤。 就我的代碼是否錯誤或我是否可以以更好的方式優化流程而言,任何幫助都將不勝感激。 謝謝 :)

這可能不是獲得所需內容的最佳方式,但它確實有效。

df['temp'] = df['Column A'] + " " + df['Column B']
df['temp'] = df['temp'].str.split(" ")
df['temp'] = df['temp'].apply(lambda list_: " ".join(sorted(list_)))
df.drop_duplicates(subset=['temp'], inplace=True)
df = df[df['Column A'] != df['Column B']]
df.drop('temp', axis=1, inplace=True)

輸出:

指數 A欄 B欄
1 DIP-2N DIP-3N
3 DIP-4N DIP-5N

通過一些調整,您可以使用 pandas 方法:

# get indices of duplicate-free (except first occurence) combined sets of col A and B
keep_ind = pd.Series(df[["Column A", "Column B"]].values.tolist()).apply(set).drop_duplicates(keep="first").index
# use these indices to filter the DataFrame
df = df.loc[keep_ind]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM