Pyomo DataPortal Není Čtení v Multi-Sloupci CSV Správně

0

Otázka

Snažím se číst ve formátu csv s více sloupců pomocí Pyomo DataPortal funkce data.load inicializovat index i ale jsem na problém, kdy nemohu vybrat pro sloupec chci pomocí select argument.

Zde je kód, já jsem běh.

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

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

Na fips.csv soubor má více sloupců s FIPS kód detaily. Snažím se vybrat sloupec s názvem fips.

Chybové dostávám je následující.

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 je matoucí, o tom pro mě je, že tato chyba zahrnuje jen první písmeno (f) sloupec, který chci vybrat (fips). Nevím, co by mohlo být příčinou tohoto v Pythonu.

Snažil jsem se načítání dat pomocí Pandy a všechny záhlaví sloupců se zdá být zatížení správně, ale chci zjistit, proč to nefunguje, pomocí data.load funkce. Jsem schopen načíst v jeden sloupec CSV v pohodě (což je jednoduché řešení, kde jsem odešel můj CSV do více jeden-sloupec CSVs), ale rád bych, aby si select funkce pracuje pro multi-sloupci CSVs pro jednoduchost a snadnost použití.

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

Nejlepší odpověď

0

Pokud se podíváte pozorně na dokumentaci pro select to říká, že tento argument by měl být seznam nebo n-tice. Takže, interně, že funkce, argument je "iterated". A struny jsou iterable takže první "f" je odlepit.

Řešení: Pokud budete mít jen jeden název sloupce, vložte jej do 1-prvek seznam nebo 1-prvek n-tice. Poznámka: budete potřebovat koncové čárka v 1-prvek n-tice, nebo to je jen interpretováno jako závorka. Zkuste toto:

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

Také v té stejné části dokumentace, je poznámka o načítání více parametrů najednou, což může být užitečné pro vás.

2021-11-18 17:18:05

Děkuji moc! Nevím, co bych si bez tohoto společenství.
Claire Wayner

Skvělé. Jak jsem zmínil v jiném příspěvku jsi měl, to zodpovězena otázka, prosím, hit "zaškrtnutí" vedle odpovědi na blízko na to (a dej mi moje hubené body...lol)
AirSquid

OK, možná jsem mluvil příliš brzy. Když se snaží svůj kód jen teď jsem narazil na různé chyby. IndexError: string index out of range. Máš nějaké myšlenky na to, co se děje? Sloupec datový rámec snažím se číst, má celá čísla, a ne řetězec.
Claire Wayner

Pochybuji, že chyba je z provozu zatížení. Podívejte se na číslo řádku, atd. Print sada po ní byl načten. Pokud to nebude fungovat, a vy jste uvízl ho ořezat na minimum reprodukovatelné příklad, spolu s pár řádky ze zdroje dat tak, že chyba může být reprodukován a přidat novou otázku.
AirSquid

No, možná tam je problém s tímto přístupem celkově. Jen jsem se vrtal s "vyberte možnost" příkaz a já nemůže dostat to, aby zatížení jedince správně nastavena. To může udělat indexovaný parametr jako v dokumentaci, ale nemůžu si to do práce pro sadu. Možná budete chtít zvážit jiné datové struktury, která je více předvídatelné.
AirSquid

V jiných jazycích

Tato stránka je v jiných jazycích

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