Python 平均可变长度的数据集

Python 平均可变长度的数据集,python,numpy,Python,Numpy,我有一个程序输出的一系列数据集。我的目标是在pyplot或numpy中将数据集的平均值绘制为一个折线图。我的问题是输出数据集的长度是不可控的 例如,我有四个长度在200到400点之间的数据集,x值标准化为0到1的数字,我想计算四个数据集的中线 到目前为止,我所能想到的就是插值(线性就足够了),在较短的序列中添加额外的数据点,或者以某种方式周期性地从较长的序列中删除值。有人有什么建议吗 目前,我正在使用csv reader导入并逐行添加到列表中,因此输出是一个列表列表,每个列表都有一组xy坐标,我

我有一个程序输出的一系列数据集。我的目标是在pyplot或numpy中将数据集的平均值绘制为一个折线图。我的问题是输出数据集的长度是不可控的

例如,我有四个长度在200到400点之间的数据集,x值标准化为0到1的数字,我想计算四个数据集的中线

到目前为止,我所能想到的就是插值(线性就足够了),在较短的序列中添加额外的数据点,或者以某种方式周期性地从较长的序列中删除值。有人有什么建议吗

目前,我正在使用csv reader导入并逐行添加到列表中,因此输出是一个列表列表,每个列表都有一组xy坐标,我认为这与2d数组相同

我实际上在想,删除多余的数据点可能比插值更容易,例如,从四个列表开始,我可以沿着x轴删除不必要的点,因为它们是标准化的,并且不断增加,然后通过引用最短的列表步长来剔除步长过小的点(这个解释可能不太清楚,我会试着写一个例子,明天再提出来)

一个示例数据集是

第1行=[[0.33,2],[0.66,5],[1,5]]


第2行=[[0.25,43],[0.5,53],[0.75,6.5],[1986]

因此,我使用的解决方案是如上所述的插值,我包含了以下代码的简化版本:

首先,数据作为字典导入,以便于访问和操作:

def average(files, newfile):    
    import csv                                                                  
    dict={}                                                                     
    ln=[]                                                                       
    max=0                                                                       
    for x in files:                                                             
        with open(x+'.csv', 'rb') as file:                                      
            reader = csv.reader(file, delimiter=',')                            
            l=[]                                                                
            for y in reader:                                                    
                l.append(y)                                                     
            dict[x]=l                                                           
            ln.append(x)
接下来,确定最长数据集的长度:

    for y in ln:                                                                
        if max == 0:                                                            
            max = len(dict[y])                                                  
        elif len(dict[y]) >= max:                                               
            max = len(dict[y])                                                  
接下来,需要定义每个数据集所需的迭代次数:

    for y in ln:                                                                
        dif = max - len(dict[y])                                                
最后,通过线性插值计算中间值并将其插入数据集

        for i in range(dif):                                                    
            loc = int( i* len(dict[y])/dif)                                     
            if loc ==0:                                                         
                loc =1                                                          
            new = [(float(dict[y][loc-1][x])+float(dict[y][loc][x]))/2
            for x in range(len(dict[y][loc]))]
            dict[y].insert(loc,new)                                             
那么取平均值很简单:

    for x in range(len(dict[ln[0]])):                                           
        t = [sum(float(dict[u][x][0]) for u in ln)/len(ln), 
        sum(float(dict[u][x][1])/4 for u in ln)]
        avg.append(t)                                                           

我并不是说这是一个漂亮的代码,但它做了我需要的…

示例数据?期望的结果?从程序输出的数据集的形式是什么?@Alexander它看起来像所有东西都被给出了,例如;期望的结果被称为“四个数据集的中间线”@Ross。你在开玩笑吗?没有数据。results列表、字典、熊猫系列等。这适用于如何提出一个好的熊猫问题,但与此相关。听起来像是一个数据分析设计问题,我认为答案取决于您的数据是什么,插入数据意味着什么,等等。如果您在exchange中提供更多关于数据的详细信息,您可能会得到好的答案。一旦您知道了如何处理数据,在这里共享一个最小的数据和代码示例将使人们更容易帮助您。值得一提的是,我唯一能想到的就是按照您的建议插值数据。@kobejohn-同意。OP能告诉我们您是要线性插值还是其他插值吗?