我有许多由另一个程序生成的文件(~2,000,000),我需要从中提取数据。这些文件具有不同方法的不同值的共同索引,我不知道如何很好地表达这一点,所以这里是一个三维示例:
[x1,y1,z1,method1]
[x1,y1,z1,method2]
[x2,y2,z2,method1]
[x2,y2,z2,method2]
最终我想要的是一个看起来像这样的熊猫数据框:
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 循环之后的所有内容都已包含在定义中,但在这里没有帮助提高可读性。我仍然必须将每种方法说明三遍。
- 如果我想更新数据集,是否有一种简单的方法可以省略已读取的文件?
- 有没有更好的方法来以这种方式对齐熊猫数据?