簡體   English   中英

python中許多csv文件的雙重條件過濾

[英]Double conditional filtering of many csv files in python

我將執行以下任務:將所有文件放在特定掩碼下,並根據兩個條件刪除重復項:如果nameTEXT相同,則保留第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.

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