Pyomo DataPortal 未正确读取 Multi-Column CSV

Pyomo DataPortal Not Reading in Multi-Column CSV Properly

我正在尝试使用 Pyomo DataPortal 函数 data.load 读取包含多个列的 csv 以初始化索引 i 但我 运行 遇到了一个我无法 select 用于我想要使用 select 参数的列。

这是我的代码运行。

from pyomo.environ import *
model = AbstractModel()
model.i = Set()

data = DataPortal()
data.load(filename='fips.csv',select='fips',set=model.i)

fips.csv 文件有多个包含 FIPS 代码详细信息的列。我正在尝试 select 名为 fips 的专栏。

我得到的错误如下。

Model declaration 'f' not found in returned query columns
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Users/cwayner/PycharmProjects/SeniorThesis/pyomo/dataportal/DataPortal.py", line 164, in load
    self._data_manager.read()
  File "/Users/cwayner/PycharmProjects/SeniorThesis/pyomo/dataportal/plugins/csv_table.py", line 58, in read
    self._set_data(tmp[0], tmp[1:])
  File "/Users/cwayner/PycharmProjects/SeniorThesis/pyomo/dataportal/TableData.py", line 117, in _set_data
    header_index.append(headers.index(str(i)))
ValueError: 'f' is not in list

让我感到困惑的是,这个错误只包含我想要 select (fips) 的列的第一个字母 (f)。我不知道 Python.

中是什么原因造成的

我已经尝试使用 Pandas 加载数据并且所有列 headers 似乎都正确加载,但我想弄清楚为什么它无法使用 data.load 功能。我可以很好地加载 one-column CSV(这是一个简单的解决方法,我将我的 CSV 分成多个 one-column CSV),但我想获得 select 函数为 multi-column CSV 工作以实现简单易用。

如果您仔细查看 selectdocumentation,它表示参数应该是列表或元组。因此,在该函数内部,参数是“迭代的”。而且,字符串是 可迭代的 所以第一个“f”被剥离了。

解决方法:如果你只有一个列名,把它放到一个1元素列表或1元素元组中。注意:您需要 1 元素元组中的尾随逗号,否则它只会被解释为括号。试试这个:

data.load(filename='fips.csv',select=('fips',),set=model.i)

同样在文档的同一部分中,有一条关于一次加载多个参数的说明,这可能对您有所帮助。