2015-07-02 21 views
-3

我正在處理一個蛋白質 - 蛋白質相互作用的大型數據集,我在一個.csv文件中。前兩列是相互作用的蛋白質,順序無關緊要(即A/B與B/A相同,因此它們是重複的)。還有第三欄,這些相互作用發表在哪裏的來源。重複對可以來自相同的來源或不同的來源。如何在csv文件的兩列中找到重複項,然後在Python中進行組合?

對於來自兩個或多個來源的重複項,我如何組合它們,然後在第三列中列出一個交互項的所有來源? (即對於交互作用A/B,重複項將是A/B和B/A)。

這裏是列的一個例子:

Interactor A   Interactor B    Source 
A     B       Mary (2005) 
C     D       John (2004) 
B     A       Mary (2005) 
A     B       Steve (1993) 
D     C       Steve (1993) 

在這種情況下,我需要

Interactor A   Interactor B    Source 
A     B       Mary (2005), Steve (1993) 
C     D       John (2004), Steve (1993) 

謝謝!

回答

3

你可以使用分類tuple作爲字典鍵聚集它們(使A, BB, A等同,元組可用作字典鍵,因爲它是不可改變的,可哈希 - 列表都沒有)。使用set來存儲彙總值並避免重複。

我還扔在defaultdict,使之更好的與集合值:

from collections import defaultdict 
import csv 

# ... read values using a csv reader (assuming name csv_reader) 

result = defaultdict(set) 
for row in csv_reader: 
    # create same key for `A, B` and `B, A` 
    key = tuple(sorted([row[0], row[1]])) 
    result[key].add(row[2]) 

# result should now contain all aggregated values 
+0

當我試圖導入我的csv文件,它說:「關鍵字ARG後非關鍵字ARG」。目前,我在做'csv_reader = csv.reader('csv file',dialect ='excel','rb')'。 –

+0

關於如何使用csv模塊以及官方文檔有無數例子。我提到了這個問題更有趣的一面。我首先用google搜索「python csv example」,甚至在這裏查看標籤'python'和'csv'。它應該讓你立即開始。 –

+0

Joe:閱讀['csv'](https://docs.python.org/2/library/csv.html#module-csv)模塊的文檔也是學習如何完成的好方法。 – martineau

相關問題