Pyomo DataPortal No Leer en Multi-Columna CSV Correctamente

0

Pregunta

Estoy tratando de leer en un csv con varias columnas utilizando el Pyomo DataPortal función data.load para inicializar un índice i pero estoy ejecutando en un problema que no puedo seleccionar para la columna quiero usar el select argumento.

Aquí es el código que estoy corriendo.

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

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

El fips.csv el archivo tiene varias columnas con FIPS código de detalles. Estoy tratando de seleccionar la columna que se llama fips.

El error que estoy recibiendo es la siguiente.

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

Lo que es confuso acerca de esto para mí es que este error se incluye sólo la primera letra (f) de la columna que quiero para seleccionar (fips). No sé lo que podría estar causando esto en Python.

He tratado de cargar los datos en el uso de los Pandas y todos los encabezados de columna que parecía ser la carga correctamente, pero quiero averiguar por qué no funciona el uso de la data.load la característica. Yo soy capaz de cargar en una columna CSV de bien (que es una solución sencilla donde puedo dividir mis CSV en varios de una columna CSVs), pero me gustaría conseguir el select la función de trabajo para multi-columna CSVs para la simplicidad y facilidad de uso.

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

Mejor respuesta

0

Si usted mira de cerca en la documentación para select se dice que el argumento debe ser una lista o tupla. Así que, internamente, para que la función, el argumento es "afirmar". Y, las cadenas de caracteres iterable así que la primera "f" se está pelado.

Solución: Si sólo tiene un nombre de columna, lo puso en un 1-lista de elementos o 1-elemento de la tupla. Nota: es necesario el punto y coma final en un 1-elemento de la tupla o es interpretado como un paréntesis. Intente esto:

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

También en la misma sección de documentación, hay una nota sobre la carga de varios parámetros a la vez, que puede ser útil para usted.

2021-11-18 17:18:05

Muchas gracias! No sé qué haría yo sin esta comunidad.
Claire Wayner

Gran. Como mencioné en el otro post que tenía, que este respondió que el tema, por favor, pulsa la "marca de verificación" junto a la respuesta a cerrar (y me dan mis escasos puntos...lol)
AirSquid

OK, yo podría haber hablado demasiado pronto. Cuando se trata de su código justo ahora, me he topado con un error diferente. IndexError: string index out of range. ¿Tiene usted alguna idea sobre lo que está pasando? La columna de la trama de datos estoy tratando de leer en ha enteros, no una cadena.
Claire Wayner

Dudo de que el error proviene de la operación de carga. Compruebe el número de línea, etc. Impresión del conjunto después de que se ha cargado. Si eso no funciona, y que están atrapados whittle a un mínimo reproducible ejemplo, junto con un par de líneas de la fuente de datos, de modo que el error se puede reproducir y publicar una nueva pregunta.
AirSquid

Bien, tal vez hay un problema con este enfoque general. Acabo jugado con el "select" comando y no puedo llegar a cargar un conjunto individual correctamente. Se puede hacer en un índice de parámetros como en la documentación, pero no puedo conseguir que funcione para un conjunto. Usted puede ser que desee considerar una diferente estructura de datos que es más predecible.
AirSquid

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................