[英]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.