我正在嘗試使用 Pyomo DataPortal 函式讀取多列的 csvdata.load以初始化索引,i但遇到了一個問題,我無法使用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 代碼詳細資訊的列。我正在嘗試選擇名為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
對此讓我感到困惑的是,此錯誤僅包含f我要選擇的列的第一個字母 ( ) ( fips)。我不知道是什么導致了 Python 中的這種情況。
我曾嘗試使用 Pandas 加載資料,并且所有列標題似乎都正確加載,但我想弄清楚為什么它不能使用該data.load功能作業。我能夠加載一個單列 CSV 就好了(這是一種簡單的解決方法,我將我的 CSV 拆分為多個單列 CSV),但select為了簡單起見,我想讓該功能適用于多列 CSV,并且便于使用。
uj5u.com熱心網友回復:
如果您仔細查看檔案,select它會說引數應該是串列或元組。因此,在該函式內部,引數是“迭代的”。并且,字串是可迭代的,因此第一個“f”被剝離。
解決方案:如果你只有一個列名,把它放到一個1元素串列或1元素元組中。注意:您需要在 1 元素元組中使用尾隨逗號,否則它會被解釋為括號。嘗試這個:
data.load(filename='fips.csv',select=('fips',),set=model.i)
同樣在檔案的同一部分中,還有關于一次加載多個引數的注釋,這可能對您有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365304.html
下一篇:c#“靜態”變數不回傳值
