1

ディクショナリ (コードの最初のブロック) を作成しており、値に応じて不要なキーを除外し、これを CSV に出力できるようにしたいと考えています。

一致させたい値は、以下の 2 番目のコード ブロックで生成されたリストに格納されます。

すべて文字列で、整数ではありません。

これまでの私のコードは次のとおりです。

#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)
4

1 に答える 1

1

ディクショナリに追加される行を制限するには、保持したいキーを含むset呼び出しを作成できます。filterこれは pandas から取得できます。たとえば、 CSV フィールドをキーとしてDataFrame使用したいとします。Journal

filter = set(data.Journal.values)

その後、ループを変更forして、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]]

2番目のケースでは:

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]]
于 2014-02-14T18:49:51.590 に答える