2016-12-19 68 views
1

我有一段python代碼,下面提到但沒有返回我想要的東西。和一個像這個例子的文件:使用python進行過濾時出錯

AAAS,ENST00000552161,1.70232E-30 
AAAS,ENST00000548258,1.09222E-84 
AAAS,ENST00000549450,1.3171E-108 
AAAS,ENST00000209873,22.3297 
AAAS,ENST00000546562,0.170807 
AAAS,ENST00000394384,5.53609 
AAAS,ENST00000547238,0.829774 
AACS,ENST00000316543,0.49901 
AACS,ENST00000261686,2.41428 

我第一列有很多重複的項目。我只想在第三列中選擇其中的一個。像下面行:

AAAS,ENST00000209873,22.3297 
AACS,ENST00000261686,2.41428 

這是代碼:

import csv 
from collections import defaultdict 

with open('data.csv', newline='') as f, open('out.csv', 'w', newline='') as out: 
    f_reader = csv.reader(f) 
    out_writer = csv.writer(out) 
    d = defaultdict(list) 
    for line in f_reader: 
     d[line[1]].append(line) 
    for _,v in d.items(): 
     new_line = sorted(v, key=lambda i:float(i[2]), reverse=True)[0] 
     out_writer.writerow(new_line) 

你知道問題是什麼?

+0

我不認爲'new_line'是一個字符串列表,當你把它傳遞給'writerow' –

+0

我刪除了這兩個新行=」'但仍給我所有重複 – ARM

+0

不,我的意思是你的變量在最後一個循環'new_line' –

回答

2

這是大熊貓完美的問題:

import pandas as pd 
df = pd.read_csv('data.csv',header=None) 
df.groupby(0).max() 
#     1   2 
#0        
#AAAS ENST00000552161 22.32970 
#AACS ENST00000316543 2.41428