首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌套的for循环中附加DataFrame而不附加NaN值

在嵌套的for循环中附加DataFrame而不附加NaN值
EN

Stack Overflow用户
提问于 2021-08-12 00:42:26
回答 1查看 29关注 0票数 0

我有一个嵌套的for循环,它遍历一个字典,取出特定的数据切片,并将这个切片附加到一个新的字典中。我不确定这是否与append上的索引或循环的数量有关,或者两者都没有。代码如下所示。

代码语言:javascript
复制
def combine_timesteps(channels, startpoint = 5):
    startpoint_start = startpoint
    endpoint = None
    
    timestep_dataset = pd.DataFrame({'Discharge': discharge_values_at_strain_times[startpoint:endpoint]}).transpose()

    for channel in channels.items():
        
        for i, time_data in enumerate(channel[1]):
                        
            data = channel[1][startpoint:endpoint]
            time_int_string = str(channel[0]) + ' t-' + str(i)
            df_to_append = pd.DataFrame({time_int_string:data})

            timestep_dataset = timestep_dataset.append(df_to_append[time_int_string])
            
            print(timestep_dataset)
            
            new_start = startpoint - 1
            startpoint = new_start
            
            if endpoint == None:
                endpoint = 0
            new_end = endpoint - 1
            endpoint = new_end
            
            if startpoint == -1: 
                startpoint = startpoint_start
                endpoint = None
                break
    
    timestep_dataset_formatted = timestep_dataset.transpose()      
    
    return timestep_dataset_formatted

但是,每当发生新的追加时,它都会向下滑动附加了amount NaN值的数据,该值等于前面的起始点整数,如下所示。

代码语言:javascript
复制
Discharge           9.913190    9.908002    9.902636    9.897269    9.891902   
Channel 750 t-0          NaN         NaN         NaN         NaN         NaN   
Channel 750 t-1          NaN         NaN         NaN         NaN  259.839939   
Channel 750 t-2          NaN         NaN         NaN  274.439453  259.839939   
Channel 750 t-3          NaN         NaN  269.095527  274.439453  259.839939   
Channel 750 t-4          NaN  363.006610  269.095527  274.439453  259.839939   
Channel 750 t-5   977.719896  363.006610  269.095527  274.439453  259.839939   
Channel 1300 t-0         NaN         NaN         NaN         NaN         NaN   
Channel 1300 t-1         NaN         NaN         NaN         NaN  325.599363   
Channel 1300 t-2         NaN         NaN         NaN  420.957686  325.599363   
Channel 1300 t-3         NaN         NaN  376.701738  420.957686  325.599363   
Channel 1300 t-4         NaN  444.503183  376.701738  420.957686  325.599363   
Channel 1300 t-5  964.735686  444.503183  376.701738  420.957686  325.599363   

所需的输出格式是将t-0列中的第一个值作为第一个非NaN值(基本上是将每一列向上滑动空格,直到没有NaN值),依此类推。我不确定为什么首先抓取并追加的数据帧前面有NaN值。

代码语言:javascript
复制
Discharge           9.913190    9.908002    9.902636    9.897269    9.891902   
Channel 750 t-0   287.678547  264.190236  182.871974  208.402388  246.174055
Channel 750 t-1   259.839939  287.678547  264.190236  182.871974  208.402388 
Channel 750 t-2   274.439453  259.839939  287.678547  264.190236  182.871974 
Channel 750 t-3   269.095527  274.439453  259.839939  287.678547  264.190236 
Channel 750 t-4   363.006610  269.095527  274.439453  259.839939  287.678547
Channel 750 t-5   977.719896  363.006610  269.095527  274.439453  259.839939   
Channel 1300 t-0  362.181147  403.321962  423.858839  341.982210  237.443283   
Channel 1300 t-1  325.599363  362.181147  403.321962  423.858839  341.982210 
Channel 1300 t-2  420.957686  325.599363  362.181147  403.321962  423.858839 
Channel 1300 t-3  376.701738  420.957686  325.599363  362.181147  403.321962 
Channel 1300 t-4  444.503183  376.701738  420.957686  325.599363  362.181147 
Channel 1300 t-5  964.735686  444.503183  376.701738  420.957686  325.599363   

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-08-12 05:12:00

好了,我想通了。我必须确保在每个循环上重置索引。我可以通过使用.reset_index(drop = True)方法来实现这一点,这样新行就会显示为。。。

代码语言:javascript
复制
df_to_append = pd.DataFrame({time_int_string:data}).reset_index(drop = True)

这将确保数据被追加到正确的位置。

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

https://stackoverflow.com/questions/68750361

复制
相关文章

相似问题

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