Портал данных Pyomo Неправильно читает CSV в нескольких столбцах

0

Вопрос

Я пытаюсь читать в формате csv с несколькими столбцами, используя функцию Pyomo DataPortal data.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, обеспечивает простоту и удобство использования.

csv pyomo python
2021-11-18 16:04:59
1

Лучший ответ

0

Если вы внимательно изучите документацию по select в нем говорится, что аргументом должен быть список или кортеж. Таким образом, внутренне для этой функции аргумент "повторяется". И строки повторяются, поэтому первая буква "f" снимается.

Решение: Если у вас есть только одно имя столбца, поместите его в список из 1 элемента или кортеж из 1 элемента. Примечание: вам нужна конечная запятая в кортеже из 1 элемента, или она просто интерпретируется как скобка. Попробуйте это:

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

Также в том же разделе документации есть примечание о одновременной загрузке нескольких параметров, которое может быть вам полезно.

2021-11-18 17:18:05

Большое вам спасибо! Я не знаю, что бы я делал без этого сообщества.
Claire Wayner

Здорово. Как я уже упоминал вам в другом вашем посте, это ответ на проблему, пожалуйста, поставьте "галочку" рядом с ответом, чтобы закрыть его (и дайте мне мои скудные очки...lol).
AirSquid

Ладно, возможно, я заговорил слишком рано. Только что, пробуя ваш код, я столкнулся с другой ошибкой. IndexError: string index out of range. У тебя есть какие-нибудь мысли о том, что происходит? Столбец фрейма данных, в котором я пытаюсь прочитать, содержит целые числа, а не строку.
Claire Wayner

Я сомневаюсь, что эта ошибка связана с операцией загрузки. Проверьте номер линии и т. Д. Распечатайте набор после его загрузки. Если это не сработает, и вы застряли, сократите его до минимального воспроизводимого примера вместе с парой строк вашего источника данных, чтобы ошибка могла быть воспроизведена, и опубликуйте новый вопрос.
AirSquid

Что ж, возможно, в этом подходе в целом есть проблема. Я просто повозился с командой "выбрать" и не могу заставить ее правильно загрузить отдельный набор. Он может выполнять индексированный параметр, как в документации, но я не могу заставить его работать для набора. Возможно, вам захочется рассмотреть другую структуру данных, которая будет более предсказуемой.
AirSquid

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................