1

多数のファイルからデータを抽出し、一部のデータに対して追加の計算を実行し、最終的にスプレッドシート アプリケーションで読み取り可能な形式にフォーマットするためのより良い方法を見つけようとしています。以下は私が現在これを行っている方法ですが、もっと簡単な方法があるはずだと確信しています。

まず、ファイルを検索してデータを抽出する定義を作成します。データが複数の場所からコンパイルされる場合があるため、定義を使用します。私は正規表現を組み合わせてこれを行っており、すべてを見つけています。これは、必要に応じて別の形式にすることができます。この結果は次のようになります。

RawData=
[[M1,A1,305.91,288.12,Variable_M1_A1],
[M1,A2,319.07,303.70,Variable_M1_A2],
[M2,A1,237437.32,191460.91,Variable_M2_A1],
[M2,A2,270773.28,192581.05,Variable_M2_A2]]

いくつかのデータでやりたいことは、変数 A と M からグリッドが作成され、列のデータが正しいグリッド位置に配置されるように整理することです。現実的には、最初の行と最初の列が変数を示す単純な 2 次元行列のように見えます。

csv ファイルは次のようになります。

Placeholder,A1,A2
M1,Variable_M1_A1,Variable_M1_A2
M2,Variable_M2_A1,Variable_M2_A2

私が現在行っているのは、空の行列 (この場合は 3x3) を作成して Result と呼び、次のコードを実行することです。変数が一致する場合、基本的にすべての行とすべての変数を反復し、RawData からの値を Result マトリックスに割り当てます。

MVar=[M1,M2]
AVar=[A1,A2]
for a in range(len(RawData):
    for b in range(len(MVar)):
        for c in range(len(AVar)):
            if RawData[a][0]==Mvar[b] and RawData[a][1]==AVar[c]:
                Result[b+1][c+1]=RawData[a][4]

RawData マトリックスを取得し、M1 と A1 のすべての可能な組み合わせに基づいて Result マトリックスを作成するコードのチャンクを作成しました。これを .csv に出力したい場合は、単に csv.writer を使用します。したがって、既に存在するデータを整理したいだけの場合、これはうまく機能します。ただし、データを使用して計算を行いたい場合 (マトリックスにはならなかった RawData の値に基づいて別の列を生成するなど) は、困難になります。たとえば、csv ファイルの出力は次のようになります。

Placeholder,A1,A2,NewA
M1,Variable_M1_A1,Variable_M1_A2,(RawData[0][3]*RawData[1][2]) 
M2,Variable_M2_A1,Variable_M2_A2,(RawData[2][3]*RawData[3][2])

計算用のデータには、同じ M 値が必要ですが、異なる A 値が必要であることに注意してください。これは実行できますが、すぐに非常に複雑になります。

これを行う簡単な方法はありますか?

編集: 以下を使用した M および A リストの自動生成:

 [MethodList[i] for i,x in enumerate(MethodList) if x not in MethodList[i+1:]]

これにより、作業が簡単になるように見えますが、それでも複雑なプロセスです!

4

1 に答える 1

0

これは、for ループと対応する if 条件で完了しました。私はまだもっと良い方法があると確信していますが、これは完全に可能です。

于 2012-04-17T15:07:08.380 に答える