1

ファイルの別の部分に階層インデックスがあるスペース区切りファイルを読み込もうとしています。これは私が思いついたものです:

import pandas as pd
o = open(doc, 'rU')
for i in o:
    if i.startswith("DATA="):
        meta_ends=o.tell() + 5
        break
dp = pd.read_table(o, delim_whitespace=True, 
  lineterminator='\n', header=None, index_col=None)

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

 META (the exact structure is probably not relevant for this example)
 DATA=1 2 3 4
 5 6 7 9
 10 11 12 13    

データには、スペースで区切られた列と改行で区切られた行があります。

で行と列の MultiIndexes を作成しましたpd.MultiIndex.from_arrays。これを個別に解析します。これは私が最終的にすべきものです:

                               Column 1                Column 2
Row label 1 Row label 2
Koko maa    1989               2008231.0               4891866.0   
            1990               2036693.0               4924388.0   
Akaa        1989                  6436.0                 15637.0   
            1990                  6548.0                 15775.0   
Alajärvi    1989                  3777.0                 11653.0   
            1990                  3831.0                 11747.0   

私の以前のアプローチは、データ部分をメモリに読み取ってから、次のように DataFrame を作成することでした。

col_index = pd.MultiIndex.from_arrays(cols)
row_index = pd.MultiIndex.from_arrays(rows)
return pd.DataFrame(data, index=row_index, columns=col_index)

500Mb 以上のデータと 5M の行ラベルと 50 以上の列を使用すると、Pandas は使用可能なすべてのメモリを読み取ります (スワップで 16Gt、これは機能しません)。read_table を使用すると、データ部分を 1 回だけ読み取ることでメモリを節約できます。

私の質問は、行と列の両方の MultiIndexes を既存の DataFrame に設定する方法です。

または、read_table に外部 MultiIndex を与える方法はありますか?

4

1 に答える 1