【问题标题】:Appending a DataFrame in a nested for loop without appending NaN values在嵌套的 for 循环中附加 DataFrame 而不附加 NaN 值
【发布时间】:2021-10-15 09:47:29
【问题描述】:

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

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

但是,每当发生新的追加时,它会将追加的数据向下滑动,其数量 NaN 值等于前面的起点整数,如下所示。

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 值。

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   

感谢您的帮助。

【问题讨论】:

    标签: python pandas dataframe append nan


    【解决方案1】:

    好的,想通了。我必须确保在每个循环上重置索引。我可以通过使用 .reset_index(drop = True) 方法来做到这一点,以便新行读取 . . .

    df_to_append = pd.DataFrame({time_int_string:data}).reset_index(drop = True)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-10
      • 2021-10-03
      • 2021-12-15
      • 1970-01-01
      • 2022-11-18
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多