首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python嵌套循环中的缺失数据

Python嵌套循环中的缺失数据
EN

Stack Overflow用户
提问于 2022-04-06 14:55:19
回答 1查看 69关注 0票数 0

我正在使用一个多维数据数组,其中我为个人提供了各种数据点。我创建了一个嵌套循环,允许我在整个数据集中进行度量计算,但是,一旦重新排列它,我就会丢失数据点。从我最初的253个人中,我得到了182的计算指标。代码工作,但我不知道什么时候我要释放数据。

代码语言:javascript
复制
data_array -- containing 253 individuals, each with several subcategories 

mos0_ids=[]
mos0_dt = []
mos0_x_dpos = []
mos0_y_dpos = []
mos0_z_dpos = []

for i in range (0,252): 
    mos0=data_array[i]
    mos0_id= mos0[0][0]                                                                             
    mos0_time=mos0[:,1]                                                                                      
    mos0_x_pos=mos0[:,2]
    mos0_y_pos=mos0[:,3]
    mos0_z_pos=mos0[:,4]
    mos0_speed=mos0[:,6]

    for j in range(0,len(mos0_id)):  
        mos0_ids.append(mos0_id)
        
    for k in range(0,len(mos0_time)):
        first_mov_time=mos0_time[k]
        last_mov_time=mos0_time[k-1]
        first_movement = dt.datetime.strptime(first_mov_time, '%Y-%m-%d %H:%M:%S.%f')
        last_movement = dt.datetime.strptime(last_mov_time, '%Y-%m-%d %H:%M:%S.%f')
        x = first_movement - last_movement
        total_seconds = x.total_seconds()  
        mos0_dt.append(total_seconds)
    
    for l in range(0,len(mos0_x_pos)):
        first_mov_pos=mos0_x_pos[l]
        last_mov_pos=mos0_x_pos[l-1]
        x = first_mov_pos - last_mov_pos
        mos0_x_dpos.append(x)
    
    for m in range(0,len(mos0_y_pos)):
        first_mov_pos=mos0_y_pos[m]
        last_mov_pos=mos0_y_pos[m-1]
        x = first_mov_pos - last_mov_pos
        mos0_y_dpos.append(x)
    
    for n in range(0,len(mos0_z_pos)):
        first_mov_pos=mos0_z_pos[n]
        last_mov_pos=mos0_z_pos[n-1]
        x = first_mov_pos - last_mov_pos
        mos0_z_dpos.append(x)
        
mos0_ids
mos0_dt
mos0_x_dpos 
mos0_y_dpos 
mos0_z_dpos       

time_pos=list(zip(mos0_ids, mos0_dt, mos0_x_dpos, mos0_y_dpos, mos0_z_dpos))                                                 
time_pos=pd.DataFrame(time_pos,columns=['mos_id','dtime', 'x_position', 'y_position','z_position'])               #  transform into a dataframe         
time_pos['x_velocity'] = time_pos['x_position']/time_pos['dtime']
time_pos['y_velocity'] = time_pos['y_position']/time_pos['dtime']
time_pos['z_velocity'] = time_pos['z_position']/time_pos['dtime']

time_pos['x_acceleration'] = time_pos['x_velocity']/time_pos['dtime']
time_pos['y_acceleration'] = time_pos['y_velocity']/time_pos['dtime']
time_pos['z_acceleration'] = time_pos['z_velocity']/time_pos['dtime']

time_pos=time_pos.groupby('mos_id')
time_pos = np.array(time_pos, dtype=object)    
time_pos

编辑:

我重新安排了包含for i in range (0,253)和包含缩进的代码如下:

代码语言:javascript
复制
for i in range (0,253): 
    mos0=swarm_data_array[i]
    mos0_id= mos0[0][0]                                                                             
    mos0_time=mos0[:,1]                                                                                      
    mos0_x_pos=mos0[:,2]
    mos0_y_pos=mos0[:,3]
    mos0_z_pos=mos0[:,4]
    mos0_speed=mos0[:,6]    
    
    for j in range(len(mos0_id)):  
        mos0_ids.append(mos0_id)
        
        for k in range(len(mos0_time)):
            first_mov_time=mos0_time[k]
            last_mov_time=mos0_time[k-1]
            first_movement = dt.datetime.strptime(first_mov_time, '%Y-%m-%d %H:%M:%S.%f')
            last_movement = dt.datetime.strptime(last_mov_time, '%Y-%m-%d %H:%M:%S.%f')
            x = first_movement - last_movement
            total_seconds = x.total_seconds()  
            mos0_dt.append(total_seconds)
                
        for l in range(len(mos0_x_pos)):
            first_mov_pos=mos0_x_pos[l]
            last_mov_pos=mos0_x_pos[l-1]
            x = first_mov_pos - last_mov_pos
            mos0_x_dpos.append(x)
        
        for m in range(len(mos0_y_pos)):
            first_mov_pos=mos0_y_pos[m]
            last_mov_pos=mos0_y_pos[m-1]
            x = first_mov_pos - last_mov_pos
            mos0_y_dpos.append(x)
        
        for n in range(len(mos0_z_pos)):
            first_mov_pos=mos0_z_pos[n]
            last_mov_pos=mos0_z_pos[n-1]
            x = first_mov_pos - last_mov_pos
            mos0_z_dpos.append(x)

mos0_ids
mos0_dt
mos0_x_dpos 
mos0_y_dpos 
mos0_z_dpos       

time_pos=list(zip(mos0_ids, mos0_dt, mos0_x_dpos, mos0_y_dpos, mos0_z_dpos))                                                 
time_pos=pd.DataFrame(time_pos,columns=['mos_id','dtime', 'x_position', 'y_position','z_position'])               #  transform into a dataframe         
time_pos['x_velocity'] = time_pos['x_position']/time_pos['dtime']
time_pos['y_velocity'] = time_pos['y_position']/time_pos['dtime']
time_pos['z_velocity'] = time_pos['z_position']/time_pos['dtime']

time_pos['x_acceleration'] = time_pos['x_velocity']/time_pos['dtime']
time_pos['y_acceleration'] = time_pos['y_velocity']/time_pos['dtime']
time_pos['z_acceleration'] = time_pos['z_velocity']/time_pos['dtime']

time_pos=time_pos.groupby('mos_id') 

现在的问题是,在我使用GroupBy组织数据并应用.describe()函数之后,每个组只剩下一个固定的26计数,这是不正确的。有些群体比其他群体要大。这可能是嵌套循环的任何部分中的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 15:05:24

您可能错过了range()的一种“特定”行为。您的第一个非常简化的循环将只具有252值,而不是253

在控制台中试一试:

len(range(0,252)) -> 252

因此,由于它是嵌套的arr (矩阵),它根据对每一行进行的几个计算来松散大量的数据。解决方案:

for i in range(0, 253)for i in range(len(data_array) + 1)

我猜想所有提供的for循环都会发生同样的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71769035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档