ValueError:DataFrame真值模糊 循环将pandas列存入numpy数组报错如何解决
错误原因
你遇到的报错是因为cities列表存储的是DataFrame对象,循环中调用cities.index(i)时,该方法需要比较列表元素和当前迭代的DataFrame是否相等,而pandas的两个DataFrame做相等判断会返回逐元素的布尔矩阵,无法输出单个布尔值,因此触发真值模糊的错误。
解决方案
直接用enumerate同时遍历索引和对应的城市DataFrame,完全避开调用index方法的比较逻辑,同时提取Series的底层numpy数组再赋值,避免额外的索引对齐问题,修改后的代码如下:
cities = [perth, melbourne, brisbane] rainfall = np.empty((len(perth), len(cities))) for idx, city_df in enumerate(cities): rainfall[:, idx] = city_df.iloc[:,5].values
注意事项
- 需提前校验所有城市DataFrame的行数和perth的行数一致,否则会触发形状不匹配的赋值错误
- 后续新增城市仅需要在
cities列表中追加对应的DataFrame对象即可,不需要修改循环逻辑
内容的提问来源于stack exchange,提问作者Luke Hickinbotham
相关产品推荐
相关产品推荐

