簡體   English   中英

使用Python從csv文件的行中刪除重復項

[英]Remove duplicates from rows of a csv file using Python

我是Python的新手,正在嘗試執行以下操作。 我有一個如下的csv文件,(input.csv)

a,v,s,f
china,usa,china and uk,france
india,australia,usa,uk
japan,south africa,japan,new zealand

我想針對每行刪除重復項以獲取以下內容。

a,v,s,f (output.csv)
china,usa, and uk,france
india,australia,usa,uk
japan,south africa,,new zealand

請注意,盡管在兩個不同的行中重復了“美國”,但與在同一行中重復的“中國”和“日本”不同,它仍然保持完整。

我嘗試通過以下方式使用集合中的OrderedDict

from collections import OrderedDict
out = open ("output.csv","w")
items = open("input.csv").readlines()
print >> out, list(OrderedDict.fromkeys(items))

但是它將所有數據移到了一行

實際上,可以將其更具體地問為“如何從列表中刪除重復項”。 有一個現有的解決方案: 刪除列表中的重復項

因此,假設您的CSV文件如下所示: items.csv

a,v,s,f
china,usa,china,uk,france
india,australia,usa,uk
japan,south africa,japan,new zealand

我故意將第2行中的“ china and uk”更改為“ china,uk”。 注意以下。

然后,刪除重復項的腳本可能是:

import sys
with open('items.csv', 'r') as csv:
    for line in csv.readlines():
        print list(set(line.split(',')))

注意:現在,如果第二個確實包含“ china and uk”,則除了將文件作為CSV處理外,您還需要做其他事情。

我們可能會在迭代行和刪除項目而不關心相關原始位置時傷害數據集。 每個項目都有相關的索引(列/行),刪除它可以將下一個項目移動到其他位置。

嘗試在這種情況下使用熊貓 通過選擇同一行中的項目,您可以應用函數以根據其位置重新構造該行。 我們使用in運算符來處理china and uk這樣的場景,並將重復的值替換為空的str。

 def trans(x):
        d=[y for y in x]
        i=0
        while i<len(d):
            j=i+1
            item=d[i]
            while j<len(d):
                if item in d[j]: 
                    d[j]=d[j].replace(item,'')
                j+=1
            i+=1
        return d

您的代碼如下所示:

import pandas as pd
from io import StringIO


data="""a,v,s,f
china,usa,china and uk,france
india,australia,usa,uk
japan,south africa,japan,new zealand"""
df= pd.read_csv(StringIO(data.decode('UTF-8')) )


from collections import Counter
def trans(x):
    d=[y for y in x]
    i=0
    while i<len(d):
        j=i+1
        item=d[i]
        while j<len(d):
            if item in d[j]: 
                d[j]=d[j].replace(item,'')
            j+=1
        i+=1
    return d

print df.apply(lambda x:trans(x),axis=1 )


       a             v        s            f
0  china           usa   and uk       france
1  india     australia      usa           uk
2  japan  south africa           new zealand

為了讀取您的csv文件,您只需要替換名稱即可。 更多細節請點擊這里

 df= pd.read_csv("filename.csv")

暫無
暫無

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

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