データを抽出する必要がある別のプログラムによって生成された多くのファイル (〜 2,000,000) があります。これらのファイルには、メソッドごとに異なる値を持つ共通のインデックスがあります。これをうまく表現する方法がわからないため、ここに 3 次元の例を示します。
[x1,y1,z1,method1]
[x1,y1,z1,method2]
[x2,y2,z2,method1]
[x2,y2,z2,method2]
最終的に欲しいのは、次のような pandas データフレームです。
x y z method1 method2 ... methodn
0 x1 y1 z1 data data data
1 x2 y2 z2 data data data
2 x3 y3 z3 NaN data data
3 x4 y4 z4 data NaN data
...
n xn yn zn data NaN NaN
メソッドにいくつかの穴があり、データが整列されません。
以下は疑似コードを示しています。
file_list=glob.glob('/scratch/project/*')
method1_list=[]
method2_list=[]
...
methodn_list=[]
#Obtain data in the correct list
for outfile in file_list:
indices=(#function that obtains indices)
data=(#function that obtains primary data)
if method1: method1_list.append([indices,data])
elif method2: method2_list.append([indices,data])
...
else methodn: methodn_list.append([indices,data])
#Convert list to dataframe
method1_pd=pd.DataFrame(method1_list,columns[indices,method1])
method2_pd=pd.DataFrame(method2_list,columns[indices,method1])
...
methodn_pd=pd.DataFrame(methodn_list,columns[indices,method1])
#Apply multi index
method1=method1.set_index(indices)
method2=method2.set_index(indices)
...
methodn=methodn.set_index(indices)
#Combine data
out=method1.combine_first(method2)
out=out.combine_first(method3)
...
out=out.combine_first(methodn)
これは非常にうまく機能しますが、メソッドの数が増えるにつれて、これを書くのはかなり面倒になり、Pythonらしくないように見えます。だから私は次の質問があります:
- この方法で DataFrame を作成するより良い方法はありますか? for ループの後のすべては既に定義にラップされていますが、ここでは読みやすさには役立ちませんでした。各メソッドを 3 回述べる必要があります。
- データセットを更新したい場合、既に読み取ったファイルを省略する簡単な方法はありますか?
- この方法でパンダのデータを揃えるより良い方法はありますか?