[英]Double conditional filtering of many csv files in python
我將執行以下任務:將所有文件放在特定掩碼下,並根據兩個條件刪除重復項:如果name
和TEXT
相同,則保留第4列中最大的一個。
我目前有未經測試的代碼(基於我的上一個問題),但是由於它使用的是字典,因此它將重寫具有相同名稱但不同TEXT的先前數據。 我試圖只使用列表。
如何同時在兩個條件下進行過濾?
非常感謝您的幫助。
import glob,csv
files = glob.glob("*.txt")
fo = open("combined.csv","a")
writer = csv.writer(fo,delimiter=' ')
datum = []
nyt = set()
for f in files:
with open(f) as fi:
for row in csv.reader(fi,delimiter=' '):
crow = row[0],row[4]
nyt.add(crow)
if crow in nyt:
dupl = [element for element in datum if element[0] == row[0]]
if dupl[0][3] < row[3]:
# replace row in datum with row
if dupl[0][3] > row[3]:
continue
else:
datum.append(row)
例子
file1
name1 0.06 0.91 0.17 TEXT1 smthing smthing
name2 0.46 0.42 0.02 TEXT1 smthing smthing
name3 0.15 0.80 0.61 TEXT1 smthing smthing
file2
name1 0.68 0.38 0.61 TEXT2 smthing smthing
name2 0.73 0.62 0.03 TEXT2 smthing smthing
name3 0.84 0.81 0.60 TEXT2 smthing smthing
file3
name1 0.86 0.18 0.03 TEXT1 smthing smthing
name2 0.04 0.12 0.75 TEXT1 smthing smthing
name3 0.59 0.70 0.71 TEXT1 smthing smthing
我想得太多了,快速的解決方案是將兩個值組合為字典的唯一鍵
import glob,csv
files = glob.glob("*.txt")
fo = open("combined.csv","a")
writer = csv.writer(fo,delimiter=' ')
datum = {}
for f in files:
with open(f) as fi:
for row in csv.reader(fi,delimiter=' '):
crow = row[0],row[4]
if crow in datum:
if float(datum[crow][-4]) < float(row[3]):
datum[crow] = row[0:]
else:
datum[crow] = row[0:]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.