2014-02-13 72 views
1

我正在創建一個字典(第一塊代碼),並希望能夠根據它們的值篩選出我不需要的鍵,然後將其輸出到CSV。創建字典的一個子集,按照值列表對原始字典進行排序。

我想要匹配的值存儲在列表中,在第二塊代碼中生成。

所有是字符串,沒有整數。

這是到目前爲止我的代碼:

#new_dict = raw_input("Enter Dictionary Name") 
#source: http://bit.ly/1iOS0e3 
import csv 
new_dict = {} 
with open(raw_input("Enter csv file (including path)"), 'rb') as f: 
    reader = csv.reader(f) 
    for row in reader: 
    if row[0] in new_dict: 
     new_dict[row[0]].append(row[1:]) 
    else: 
     new_dict[row[0]] = row[1:] 
print new_dict 

而且名單:

#modified from: http://bit.ly/1iOS7Gu 
import pandas 
colnames = ['Date Added to Catalog', 'PUBMEDID', 'First Author', 'Date', 'Journal', 'Link', 'Study', 'DT', 'Initial Sample Size', 'Replication Sample Size', 'Region', 'Chr_id', 'Chr_pos', 'Reported Gene(s)', 'Mapped_gene', 'p-Value', 'Pvalue_mlog', 'p-Value (text)', 'OR or beta', '95% CI (text)', 'Platform [SNPs passing QC]', 'CNV'] 
data = pandas.read_csv('C:\Users\Chris\Desktop\gwascatalog.csv', names=colnames) 
+0

嗨,我有點對你的問題不清楚 - 就是從'data'取值的想法,如果'new_dict'關鍵是不在特定的列中,然後刪除該字典項目?此外,您當前的代碼存儲單元格值的列表,而不是按行分隔 - 這是您的意圖嗎? –

+0

@ will-hart是的,這就是我想要做的。不,我打算逐行分開。也許你也可以幫助解決這個問題,如果你能看到一個解決方案和原始問題? – cps1

回答

1

要限制哪些行添加到字典中,你可以創建一個setfilter其中包含的按鍵時你想保持。

filter = set(data.Journal.values) 

然後,您可以修改您的for循環來檢查我們是否應該從CSV文件中的行存儲:這可以從你的熊貓DataFrame假設你想用Journal CSV領域作爲重點來獲得,例如。這可能看起來如下:

for row in reader: 
    if row[0] in filter: 
     if row[0] in new_dict: 
      new_dict[row[0]].append(row[1:]) 
     else: 
      new_dict[row[0]] = [row[1:]] 

根據你的評論,如果你想通過行記錄分開,你需要更改線路

new_dict[row[0]] = row[1:] 

到:

new_dict[row[0]] = [row[1:]] 

在第一種情況下爲row = [1, 2, 3, 4, 5]

my_list = row[1:] 
# my_list = [2, 3, 4, 5] 
my_list.append(row[1:]) 
# my_list = [2, 3, 4, 5, [2, 3, 4, 5]] 

雖然在第二種情況:

my_list = [row[1:]] 
# my_list = [[2, 3, 4, 5]] 
my_list.append(row[1:]) 
# my_list = [[2, 3, 4, 5], [2, 3, 4, 5]] 
相關問題