Pyomo DataPortal Çok Sütunlu csv'de Düzgün Okunmuyor

0

Soru

Pyomo DataPortal işlevini kullanarak birden çok sütuna sahip bir csv'de okumaya çalışıyorum data.load bir dizini başlatmak için i ancak, kullanmak istediğim sütun için seçemediğim bir sorunla karşılaşıyorum select tartışma.

İşte çalıştırdığım kod.

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

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

Bu fips.csv dosya, FIPS kod ayrıntılarını içeren birden çok sütuna sahiptir. Çağrılan sütunu seçmeye çalışıyorum fips.

Aldığım hata şu şekildedir.

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

Bu konuda kafa karıştırıcı olan şey, bu hatanın sadece ilk harfi içermesidir (f seçmek istediğim sütunun (fips). Ben Python bu neden ne olabilir bilmiyorum.

Verileri Pandaları kullanarak yüklemeyi denedim ve tüm sütun başlıkları doğru yükleniyor gibi görünüyordu, ancak neden Pandaları kullanarak çalışmadığını anlamak istiyorum. data.load özellik. Tek sütunlu bir csv'ye gayet iyi yükleyebiliyorum (CSV'Mİ birden çok tek sütunlu CSV'YE böldüğüm basit bir geçici çözüm), ancak şunu elde etmek istiyorum: select fonksiyon basitlik ve kullanım kolaylığı için çok sütunlu CSV'LER için çalışır.

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

En iyi cevabı

0

Belgelere yakından bakarsanız select argümanın bir liste veya tuple olması gerektiğini söylüyor. Yani, dahili olarak bu işleve argüman "yinelenir". Ve dizeler yinelenebilir, bu yüzden ilk "f" soyuluyor.

Çözüm: Yalnızca bir sütun adınız varsa, bunu 1 öğe listesine veya 1 öğe kümesine koyun. Not: 1 öğeli bir tuple içinde sondaki virgüle ihtiyacınız vardır veya yalnızca parantez olarak yorumlanır. Bunu dene:

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

Ayrıca dokümantasyonun aynı bölümünde, aynı anda birden çok parametrenin yüklenmesiyle ilgili bir not vardır, bu sizin için yararlı olabilir.

2021-11-18 17:18:05

Çok teşekkür ederim! Bu topluluk olmasaydı ne yapardım bilmiyorum.
Claire Wayner

Harika. Sahip olduğunuz diğer gönderide size bahsettiğim gibi, bu sorunu yanıtladı, lütfen kapatmak için cevabın yanındaki "onay işaretini" tıklayın (ve bana yetersiz puanlarımı verin...lol)
AirSquid

Tamam, çok erken konuşmuş olabilirim. Az önce kodunuzu denerken farklı bir hatayla karşılaştım. IndexError: string index out of range. Neler olduğuna dair bir fikrin var mı? Okumaya çalıştığım veri çerçevesinin sütununda bir dize değil, tamsayılar var.
Claire Wayner

Bu hatanın yükleme işleminden kaynaklandığından şüpheliyim. Satır numarasını vb. Kontrol edin. Set yüklendikten sonra yazdırın. Bu işe yaramazsa ve takılırsanız, hatanın yeniden üretilebilmesi ve yeni bir soru gönderilebilmesi için veri kaynağınızın birkaç satırıyla birlikte en az tekrarlanabilir bir örneğe indirgeyin.
AirSquid

Belki de genel olarak bu yaklaşımla ilgili bir sorun vardır. Sadece "seç" komutuyla uğraştım ve tek bir kümeyi doğru şekilde yüklemesini sağlayamıyorum. Belgelerde olduğu gibi dizinlenmiş bir parametre yapabilir, ancak bir küme için çalışmasını sağlayamıyorum. Daha öngörülebilir olan farklı bir veri yapısı düşünebilirsiniz.
AirSquid

Diğer dillerde

Bu sayfa diğer dillerde

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