0

大きなデータ ファイルを読み込んで、他のスクリプトがより適切に処理できる形式に変換しようとしています。

各データファイルには一連のヘッダーがあり、その後に関連するデータ ポイントを参照する 2 つの列が続きます。これに続いて、別の一連のヘッダー (同じ列内) と、次の関連データ ポイントのセットが続きます。たとえば、次のようになります。

データファイルのサンプル

行を並べ替えて、複数の列で構成されるファイルに書き込む必要があります。したがって、データの各セットの最初の列は同じ (頻度) であるため、取得しようとしているものは次のようになります。

ソートされたデータセット

私はpythonが初めてで、これを管理する半分の成功した方法をまだ見つけなければなりません。基本的なifステートメントを試しました:

def LoadData(filename):

Datafile = open(filename,'r')

# Define empty lists to read the values into
a1 = []
data=Datafile.readlines()

index = 1   
for line in range(14,len(data)):
    w=data[line].split()
    if type(w[0]) == float:
        a1.append(w[index])
    if re.findall(r'[\w.]THz', w[0]):
        index = index +1

return a1

しかし、リストを多次元に定義できないため、次の一連のデータ値を別の列に割り当てる方法がわかりません。最初に正確な次元を知る必要があるため、numpy 配列を定義しても役に立ちません。

これを行うための比較的簡単な方法があるに違いないと確信していますが、それを見つけることができませんでした。助けていただければ幸いです!

これは、コメントで要求されたメモ帳で開いたデータです。 データのメモ帳バージョン

4

3 に答える 3

0

目的の 2 次元構造をエミュレートするために、リストにリストを含めることができます。

arr= []
arr.append(['R1C1', 'R1C2', 'R1C3'])
arr.append(['R2C1', 'R2C2', 'R2C3'])
arr.append(['R3C1', 'R3C2', 'R3C3', 'R3C4'])
# each list can have as many elements as required
print(arr[-1][1]) # last row, second column

アルゴリズムがスパース配列と要素への即時アクセスを必要とする場合は、タプルをインデックスとして辞書を使用できます。

arr= {}
arr[1,2]= 'R1C2'
arr[10,5]= 'R10C5'
print(arr[1,2])
于 2012-12-04T09:04:32.397 に答える
0

私は(まだ)使っていませんが、pandas はユースケースに適したツールになるように見えます。データフレームのデータ構造を確認してくださいhttp://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe

IO ツール http://pandas.pydata.org/pandas-docs/stable/io.html

于 2012-12-03T16:04:35.643 に答える
0

あなたの例の数値が、作成したい結果テーブルにどのように接続されているかは完全にはわかりませんが、タブ区切りファイルを読み取り、それを 2 次元配列に変換する関数を次に示します。 float は Python float に変換され、残りは文字列のままです。

def load_data(filename):
    data = []
    with open(filename) as f:
        for line in f:
            fields = []
            for field in line.strip().split("\t"):
                try:
                    fields.append(float(field))
                except Exception, e:
                    fields.append(field)
            data.append(fields)
    return data

例:

8.57    0.21
8.58    0.22
8.59    0.23

Curvelabel    = Balance [ 1 (6) ]
Filename      = bil

8.57    0.21
8.58    0.22
8.59    0.23

出力:

[[8.57, 0.21], [8.58, 0.22], [8.59, 0.23],
[''],
['Curvelabel    = Balance [ 1 (6) ]'],
['Filename      = bil'],
[''],
[8.57, 0.21], [8.58, 0.22], [8.59, 0.23]]
于 2012-12-04T09:14:22.633 に答える