我有一个嵌套的for循环,它遍历一个字典,取出特定的数据切片,并将这个切片附加到一个新的字典中。我不确定这是否与append上的索引或循环的数量有关,或者两者都没有。代码如下所示。
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值的数据,该值等于前面的起始点整数,如下所示。
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 谢谢你的帮助。
发布于 2021-08-12 05:12:00
好了,我想通了。我必须确保在每个循环上重置索引。我可以通过使用.reset_index(drop = True)方法来实现这一点,这样新行就会显示为。。。
df_to_append = pd.DataFrame({time_int_string:data}).reset_index(drop = True)这将确保数据被追加到正确的位置。
https://stackoverflow.com/questions/68750361
复制相似问题