2 つの列に基づいて csv ファイルから重複行を削除するにはどうすればよいですか。これらの列の 1 つは正規表現を使用して一致を判断し、最初のフィールド (IPAddress) でグループ化します。最後に、カウント フィールドを行に追加して、重複行をカウントします。
csv ファイル:
IPAddress, Value1, Value2, Value3
127.0.0.1, Test1ABC, 10, 20
127.0.0.1, Test2ABC, 20, 30
127.0.0.1, Test1ABA, 30, 40
127.0.0.1, Value1BBA, 40, 50
127.0.0.1, Value1BBA, 40, 50
127.0.0.2, Test1ABC, 10, 20
127.0.0.2, Value1AAB, 20, 30
127.0.0.2, Value2ABA, 30, 40
127.0.0.2, Value1BBA, 40, 50
IPAddress と Value1 で一致させたい (最初の 5 文字が一致する場合、Value1 が一致する)。
これは私に与えるでしょう:
IPAddress, Value1, Value2, Value3, Count
127.0.0.1, Test1ABC, 10, 20, 2
127.0.0.1, Test2ABC, 20, 30, 1
**127.0.0.1, Test1ABA, 30, 40** (Line would be removed but counted)
127.0.0.1, Value1BBA, 40, 50, 2
**127.0.0.1, Value1BBA, 40, 50** (Line would be removed but counted)
127.0.0.2, Test1ABC, 10, 20, 1
127.0.0.2, Value1AAB, 20, 30, 2
127.0.0.2, Value2ABA, 30, 40, 1
**127.0.0.2, Value1BBA, 40, 50** (Line would be removed but counted)
新しい出力:
IPAddress, Value1, Value2, Value3, Count
127.0.0.1, Test1ABC, 10, 20, 2
127.0.0.1, Test2ABC, 20, 30, 1
127.0.0.1, Value1BBA, 40, 50, 2
127.0.0.2, Test1ABC, 10, 20, 1
127.0.0.2, Value1AAB, 20, 30, 2
127.0.0.2, Value2ABA, 30, 40, 1
セットを使用してみましたが、明らかにセットにインデックスを付けることができません。
entries = set()
writer=csv.writer(open('myfilewithoutduplicates.csv', 'w'), delimiter=',')
for row in list:
key = (row[0], row[1])
if re.match(r"(Test1)", key[1]) not in entries:
entries.add(key)
疑似コード ?:
# I want to iterate through rows of a csv file and
if row[0] and row[1][:5] match a previous entry:
remove row
add count
else:
add row
どんな助けや指導も本当に感謝しています。