pandas中替换Series.append为pd.concat无法正常运行问题
错误原因
pd.concat的第一个入参要求传入由pandas对象(Series、DataFrame)组成的可迭代对象(列表/元组等),你之前的写法把两个Series作为独立位置参数直接传入,会导致参数解析错误,无法正常运行。
逐次循环场景的正确替换写法
和原Series.append逻辑完全等价的pd.concat写法,只需要把两个待拼接的Series包裹为列表,作为第一个参数传入即可,默认axis=0的行拼接逻辑和原append行为完全一致:
RULColumn = pd.Series(dtype='float64') for unit in range(turboFanData['unitNum'].iloc[-1]): turboFanUnit = turboFanData[turboFanData['unitNum'] == unit+1] new_segment = turboFanUnit['cycles'].iloc[::-1].copy() - 1 # 替换原append的正确写法 RULColumn = pd.concat([RULColumn, new_segment])
性能优化建议
循环内逐次拼接pandas对象会反复生成新的Series副本,数据量较大时运行效率很低。更推荐先把所有计算得到的RUL分段存入普通Python列表,循环结束后一次性完成拼接,结果和原逻辑完全一致,性能提升明显:
rul_segment_list = [] total_units = turboFanData['unitNum'].iloc[-1] for unit in range(total_units): turboFanUnit = turboFanData[turboFanData['unitNum'] == unit+1] segment = turboFanUnit['cycles'].iloc[::-1].copy() - 1 rul_segment_list.append(segment) # 一次性拼接所有分段,指定和原逻辑一致的float64类型 RULColumn = pd.concat(rul_segment_list).astype('float64')
提示:如果需要重置拼接后的索引、避免索引值重复,可以在
pd.concat中加入参数ignore_index=True,可根据自身业务需求选择是否添加。
内容的提问来源于stack exchange,提问作者run_the_race
相关产品推荐
相关产品推荐

