2014-02-13 5 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 

그리고 목록 : 여기

내 지금까지 코드 당신이 setfilter라는 만들 수 있습니다 사전에 추가되는 행을 제한하는

#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

안녕하세요, 저는 귀하의 질문에 명확 조금 해요 - new_dict' '에 키가없는 경우 data''에서 값을 취할 수있는 아이디어이며, 특정 열에서 사전 항목을 제거 하시겠습니까? 또한 현재 코드는 행별로 분리하지 않고 셀 값 목록을 저장합니다. - 의도 한대로입니까? –

+0

@ will-hart 그래, 그게 내가하고 싶은거야. 아니요, 행별로 구분하려고했습니다. 그가 원래의 질문에 대한 해결책을 볼 수 있다면 아마도 그걸 도울 수 있을까요? – cps1

답변

1

이 키를 포함하는 너는 지키고 싶어. 우리는 CSV 파일에서 행을 저장해야하는지 여부를 확인하기 위해

filter = set(data.Journal.values) 

당신은 다음 for 루프를 수정할 수 : 이렇게하면 키로 Journal CSV 필드를 사용하고 싶었 가정 예를 들어, 팬더 DataFrame에서 얻을 수있다 . 당신이 행에 의해 레코드를 분리 할 경우 라인

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

을 변경해야합니다, 당신의 의견으로 당

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:]] 
를이 다음과 같이 수

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]]