如何从过滤非NaN值的DataFrame创建Pyomo Set对象
解决Pyomo Set仅保留有效浮点型索引的问题
没问题,我来帮你搞定这个需求!你现在的代码直接用了DataFrame的所有唯一索引,所以会包含A、B、C三个值。要只保留x列非NaN且为浮点型的索引(也就是"B"),需要先对DataFrame做过滤处理,再用过滤后的索引初始化Pyomo Set,具体步骤如下:
步骤1:清理并转换x列数据
首先,你的x列里的65,2看起来是欧洲格式的小数(用逗号做小数点分隔符),需要先把它转换成标准的浮点型,同时保留原有的NaN值:
import pandas as pd import pyomo.environ as pyo # 处理x列,将逗号替换为点后转为数值类型,无效值转为NaN data['x'] = pd.to_numeric(data['x'].str.replace(',', '.'), errors='coerce')
步骤2:筛选有效索引
接着,筛选出x列非NaN的行,提取它们的索引:
# 过滤出x列不为NaN的行,获取唯一索引 valid_indices = data[data['x'].notna()].index.unique()
步骤3:初始化Pyomo Set
最后用筛选后的有效索引来创建Set:
m = pyo.ConcreteModel() m.index = pyo.Set(initialize=valid_indices, doc='Index Set with valid non-NaN float values')
这样创建出来的m.index就只会包含"B"这个索引啦!
内容的提问来源于stack exchange,提问作者oakca
相关产品推荐
相关产品推荐

