Pyomo DataPortal Non Lettura Multi-Colonna CSV Correttamente

0

Domanda

Sto cercando di leggere un file csv con i più colonne utilizzando il Pyomo DataPortal funzione data.load per inizializzare un indice i ma sono in esecuzione in un problema per il quale non è possibile selezionare per la colonna voglio che utilizza il select argomento.

Qui è il codice che sto correndo.

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

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

Il fips.csv il file contiene più colonne con FIPS codice di dettagli. Sto cercando di selezionare la colonna denominata fips.

L'errore che ricevo è il seguente.

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

Ciò che è fonte di confusione su questo, per me, è che questo errore si presenta solo la prima letteraf) della colonna che si desidera selezionare (fips). Non so quale potrebbe essere la causa in Python.

Ho cercato di caricare i dati nell'utilizzo di Panda e tutte le intestazioni di colonna sembrava essere caricato correttamente, ma voglio capire perché non funziona utilizzando il data.load funzione. Io sono in grado di caricare in una sola colonna CSV bene (che è una soluzione semplice, in cui ho diviso la mia CSV in più di una colonna CSVs), ma mi piacerebbe avere il select funzione di lavoro per multi-colonna CSVs per semplicità e facilità di utilizzo.

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

Migliore risposta

0

Se si guarda attentamente la documentazione per select si dice che l'argomento dovrebbe essere un elenco o una tupla. Così, all'interno di tale funzione, l'argomento è "firma". E, stringhe sono iterable così il primo "f" è in fase di staccata.

Soluzione: Se avete solo il nome di colonna, metterlo in un 1-elenco di elementi o 1-elemento della tupla. Nota: è necessario che la virgola finale 1 elemento della tupla o è solo interpretato come una parentesi. Prova questo:

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

Inoltre, nella stessa sezione di documentazione, c'è una nota sul caricamento dei parametri multipli in una sola volta, il che potrebbe essere utile a voi.

2021-11-18 17:18:05

Grazie mille! Non so cosa avrei fatto senza di questa comunità.
Claire Wayner

Grande. Come vi ho detto nell'altro post che hai avuto, è questo rispose il problema, si prega di premere il "segno di spunta" accanto alla risposta a chiudere (e mi danno la mia maestra di punti...lol)
AirSquid

OK, forse ho parlato troppo presto. Quando si cerca il codice solo ora, mi sono imbattuto in un errore diverso. IndexError: string index out of range. Avete qualche idea su quello che sta succedendo? La colonna del frame di dati sto cercando di leggere in ha interi, non una stringa.
Claire Wayner

Mi viene il dubbio che l'errore sta venendo l'operazione di caricamento. Controllare il numero di linea, etc. Stampa il set dopo che è stata caricata. Se questo non funziona e si è bloccato whittle giù al minimo riproducibile esempio, insieme con un paio di righe di dati di origine in modo che l'errore può essere riprodotto e una nuova domanda.
AirSquid

Beh, forse c'è un problema con questo approccio globale. Ho solo smanettato con le opzioni "selezionare" comando e non riesco a farlo caricare un singolo impostato correttamente. Si può fare di un parametro indicizzato come nella documentazione, ma non riesco a farlo funzionare per un set. Si potrebbe desiderare di prendere in considerazione una diversa struttura di dati che è più prevedibile.
AirSquid

In altre lingue

Questa pagina è in altre lingue

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