Portal danych Pyomo Prawidłowo czyta CSV w kilku kolumnach

0

Pytanie

Staram się czytać w formacie csv z kilkoma kolumnami, za pomocą funkcji Pyomo DataPortal data.load do inicjalizacji indeksu i ale spotykam się z problemem, z którym nie mogę wybrać odpowiednią kolumnę za pomocą select argument.

Oto kod, który uruchamiam.

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

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

To fips.csv plik zawiera kilka kolumn z częściami kodu FIPS. Próbuję wybrać kolumnę o nazwie fips.

Błąd, który mam, jest następująca.

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

Co mi przeszkadza w tym, to to, że ten błąd obejmuje tylko pierwszą literę (f) kolumny, który chcę wybrać (fips). Nie wiem, co może być przyczyną tego w Pythonie.

Próbowałem przesłać dane za pomocą Pandas, i wszystkie nagłówki kolumn, wygląda na to, uruchamiały się poprawnie, ale chcę dowiedzieć się, dlaczego to nie działa z pomocą data.load cecha. Mogę przesłać plik CSV z jedną kolumną po prostu świetnie (to jest proste obejście, w którym dzielę się swoją CSV na kilka CSV z jedną kolumną), ale chciałbym uzyskać select funkcja działająca na многоколоночных CSV, zapewnia łatwość i wygodę użytkowania.

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

Najlepsza odpowiedź

0

Jeśli uważnie zapoznać się z dokumentacją w select stwierdzono w nim, że argument musi być lista lub orszak. W ten sposób wewnętrznie do tej funkcji, argument "powtarza się". I wiersze powtarzane, więc pierwsza litera "f" jest usuwany.

Rozwiązanie: Jeśli masz tylko jedną nazwę kolumny, umieść go w liście z 1 elementu lub orszak z 1 elementu. Uwaga: potrzebujesz końcowy przecinek w motorcade z 1 elementu, lub ona po prostu jest interpretowany jako nawias. Spróbuj to:

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

Również w tym samym dziale dokumentacji jest informacja o jednoczesnego pobierania kilku parametrów, które mogą być ci przydatne.

2021-11-18 17:18:05

Dziękuję bardzo! Nie wiem, co bym zrobił bez tej społeczności.
Claire Wayner

Fajne. Jak już wspomniałem w innym poście, to odpowiedź na problem, proszę zaznacz pole wyboru obok odpowiedzi, aby go zamknąć (i daj mi moje skromne punkty...lol).
AirSquid

No dobra, może nie mówić zbyt wcześnie. Tylko że, próbuje twój kod, mam do czynienia z innym błędem. IndexError: string index out of range. Masz jakieś myśli o tym, co się dzieje? Kolumna ramki danych, w którym staram się czytać, zawiera liczb całkowitych, a nie wiersz.
Claire Wayner

Wątpię, że ten błąd jest związany z zabiegiem pobrania. Sprawdź numer linii, itp. Wydrukuj zestaw po jego pobraniu. Jeśli to nie zadziała, i utkniesz, zmniejszyć go do minimum odtwarzanego przykład wraz z kilkoma wierszami twojego źródła danych, aby błąd może być powielana i zadaj nowe pytanie.
AirSquid

Cóż, być może w tym podejściu w ogóle jest problem. Ja po prostu bawił się z drużyną "wybierz" i nie mogę zmusić go poprawnie załadować oddzielny zestaw. Może on wykonywać parametr indeksowany, jak w dokumentacji, ale nie mogę zmusić go do pracy dla zestawu. Może masz ochotę wziąć pod uwagę inną strukturę danych, która będzie bardziej przewidywalne.
AirSquid

W innych językach

Ta strona jest w innych językach

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