Pyomo DataPortal Nu Citesc în Multi-Coloană CSV în mod Corespunzător

0

Problema

Am încercat să citesc într-un csv cu mai multe coloane folosind Pyomo DataPortal funcție data.load pentru a inițializa un index i dar sunt difuzate într-o problemă în cazul în care nu selectați pentru coloana vreau utilizarea select argument.

Aici este codul candidez.

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

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

La fips.csv fișierul are mai multe coloane cu FIPS codul de detalii. Încerc să selectați coloana numita fips.

Eroarea primesc este următoarea.

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

Ceea ce este confuz despre acest lucru pentru mine este că această eroare a include doar prima literă (f) din coloana pe care vreau să îl selectați (fips). Nu stiu ce ar putea cauza acest lucru în Python.

Am încercat încărcarea datelor în utilizarea Panda și toate antetele de coloană părea să fie de încărcare corect, dar vreau să-mi dau seama de ce nu este de lucru cu ajutorul data.load caracteristică. Eu sunt capabil să încarce într-o coloană CSV bine (care este o simplă soluție în cazul în care îmi împart CSV în mai multe-o coloană formă de fișiere csv), dar mi-ar place pentru a obține select funcția de lucru pentru multi-coloană formă de fișiere csv pentru simplitate și ușurința de utilizare.

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

Cel mai bun răspuns

0

Dacă te uiți atent la documentația pentru select se spune că argumentul ar trebui să fie o listă sau tuplu. Deci, pe plan intern, pentru această funcție, argumentul este "reiterat". Și, siruri de caractere sunt iterable deci, primul "f" este desprinsă.

Soluție: Dacă aveți doar un nume de coloană, pune-l într-un 1-element de listă sau 1-element de tuplu. Notă: aveți nevoie de virgulă la final, într-o 1-element tuplu sau este interpretat doar ca o paranteza. Încercați acest lucru:

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

De asemenea, în secțiunea de documente, există o notă despre încărcarea mai multor parametri la o dată, care ar putea fi de ajutor pentru tine.

2021-11-18 17:18:05

Vă mulțumesc atât de mult! Nu știu ce m-aș face fără această comunitate.
Claire Wayner

Mare. Cum am spus in alt post ai avut, acesta a răspuns la problemă, vă rugăm să apăsați pe "bifa" pe lângă răspunsul la închideți-l (și să-mi dea puncte slabe...lol)
AirSquid

OK, poate am vorbit prea repede. Când încercarea de codul doar acum, am fugit într-o altă eroare. IndexError: string index out of range. Ai vreo idee ce se intampla? Coloana de date cadru încerc să citesc în are numere întregi, nu un șir de caractere.
Claire Wayner

Mă îndoiesc că eroarea vine de la funcționarea la sarcină. Verificați numărul de linie, etc. Print set după ce a fost încărcat. Dacă asta nu funcționează și sunteți blocat whittle jos la un nivel minim reproductibile exemplu, împreună cu câteva linii de sursă de date, astfel încât eroarea poate fi reprodus și post o nouă întrebare.
AirSquid

Ei bine, poate că există o problemă cu această abordare de ansamblu. Am jucat cu comanda "select" și nu pot să-l pentru a încărca un individ setată corect. Se poate face o indexate parametru ca și în documentare, dar eu nu pot ajunge să lucreze pentru un set. S-ar putea dori să ia în considerare o altă structură de date care este mult mai previzibil.
AirSquid

În alte limbi

Această pagină este în alte limbi

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