Pandas for循环内条件判断出现真值模糊错误如何解决?
问题解决方法
报错原因
- 你的
for i in split_df是遍历split_df内的DataFrame切片元素,不是列表索引,直接用DataFrame和0做相等判断会返回布尔型DataFrame,if语句无法直接判断整个DataFrame的布尔值,因此触发该报错。 - 后续代码中用
split_df[i]取值的逻辑错误,i已经是切片本身,无需再从列表索引取值。 - 额外注意:你初始化
result为列表,后续又赋值为DataFrame,类型混用也会导致运行异常。
修正后可运行代码
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(100, size=(100,3)), columns=['Value1', 'Value2', 'Value3']) # 生成步长为1、窗口大小12的滑窗切片 split_df = [df[i:i+12] for i in range(0, len(df))] # 取第一个切片作为初始化结果 result = split_df[0].copy() # 遍历后续所有切片,取最后一行追加到结果 for seg in split_df[1:]: last_row = seg.tail(1) # pandas 2.0+已弃用append方法,使用pd.concat完成拼接 result = pd.concat([result, last_row], ignore_index=True)
简化实现
如果你的需求就是保留第一个完整窗口,后续每个窗口仅保留最后一行,完全不需要生成滑窗列表再循环拼接,一行即可实现等价逻辑:
result = pd.concat([df.head(12), df.loc[12:]], ignore_index=True)
内容的提问来源于stack exchange,提问作者AV111
相关产品推荐
相关产品推荐

