2016-11-02 4 views
2

私はヘッダー付きのcsvファイルを持っていますが、ヘッダーを使用してクラス内の場所を識別して更新しようとしています。Pythonでクラス参照を動的に構築する

Age, all, bladder, brain, breast,... 
0, 23.34, 0, 3.8905, 0, ... 
1, 22.7339, 0, 4.4064, 0,... 

ようにように、私は98個のエントリを持つリスト「ベースライン」を持って、各エントリは、フィールド.cancerを含み、そして.cancerにフィールドがある.ALL、.bladder、.brain、.breastと名前(すなわち、膀胱、脳の一部となるよう

k=0 
for row in csv_data: 
    for j in range(len(row)): 
     baseline[k].cancer.header[j].prevalence = row[j] 
    k += 1 

:50歳で膀胱癌の有病率は、私のような何かをするコマンドを必要とする

baseline[50].cancer.bladder.prevalence 

としてアクセスすることができます。 ..)はヘッダーから来ます。これを行う簡単な方法はありますか?

+0

パンダのデータフレームを調べてみてください。 –

+0

'getattr(parentobject、" subobject_name ")'でサブオブジェクトをいつでも取得できます。 –

+0

速い答えをありがとう。私はパンダについて学び、自分のコードを書き直す前に、以下のような、ブライアンの答えを短期間で実装する必要があるように見えます。 – chadb

答えて

0

これはpandasのジョブのように見えますが、列番号/順序が固定されている場合はこれを実行できます。次のコードは動作するはずです:いくつかのPython 3の機能を利用していることに注意してください。

import csv 

with open('data.txt') as csvfile: 
    data = csv.reader(csvfile, delimiter=',') 
    _, *cancer_columns = next(data) # capture the headers 

    for age, *cancers in data: 
     for i, cancer in enumerate(cancers): 
      # dynamically get attribute and assign based on cancer_columns index 
      getattr(baseline[age].cancer, cancer_columns[i]).prevalence = float(cancer) 
関連する問題