Pyomo DataPortal Não Ler em Multi-Coluna CSV Corretamente

0

Pergunta

Eu estou tentando ler um arquivo csv com várias colunas usando o Pyomo DataPortal função data.load para inicializar um índice i mas estou correndo para um problema onde não é possível selecioná para a coluna eu quero usar o select argumento.

Aqui está o código que eu estou correndo.

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

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

O fips.csv arquivo possui várias colunas com o código FIPS detalhes. Eu estou tentando selecionar a coluna chamada fips.

O erro que eu estou ficando é o seguinte.

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

O que é confuso sobre isso para mim é que este erro inclui apenas a primeira letra (f) da coluna que eu quero para seleccionar (fips). Eu não sei o que poderia estar causando isso em Python.

Eu tentei carregar os dados no uso de Pandas e todos os cabeçalhos de coluna parecia estar carregando corretamente, mas eu quero descobrir por que ele não funcionar usando o data.load recurso. Eu sou capaz de carregar em uma coluna de CSV apenas a multa (que é uma solução simples, onde vou dividir a minha CSV em várias de uma coluna CSVs), mas eu gostaria de obter o select função para multi-coluna CSVs para a simplicidade e facilidade de uso.

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

Melhor resposta

0

Se você olhar de perto a documentação para select ele diz que o argumento deve ser uma lista ou tupla. Assim, internamente, para essa função, o argumento é "iterado". E, seqüências de caracteres são iterable assim, a primeira "f" está sendo retirado.

Solução: Se você tiver apenas uma coluna de nome, coloque-a em um 1-elemento de lista ou 1-elemento da tupla. Nota: você precisa a vírgula à direita por 1 elemento da tupla ou é apenas interpretada como parêntese. Tente isso:

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

Também na mesma seção de documentação, há uma observação sobre o carregamento de múltiplos parâmetros ao mesmo tempo, o que pode ser útil para você.

2021-11-18 17:18:05

Muito obrigado! Eu não sei o que eu faria sem essa comunidade.
Claire Wayner

Grande. Como eu mencionei para vocês no outro post que você tinha, ele esta respondida a questão, bata por favor a "marca de verificação" ao lado da resposta para fechá-lo (e me dar a minha singela pontos...rsrs)
AirSquid

OK, talvez eu tenha falado muito em breve. Ao tentar o seu código de agora, eu me deparei com um erro diferente. IndexError: string index out of range. Você tem alguma opinião sobre o que está acontecendo? A coluna do quadro de dados que eu estou tentando ler tem inteiros, não uma cadeia.
Claire Wayner

Eu duvido que o erro é proveniente da operação de carregamento. Verifique o número da linha, etc. Imprimir a definir depois de ter sido carregado. Se isso não funcionar e você estiver preso whittle-lo para baixo para um mínimo reproduzível exemplo, juntamente com um par de linhas da fonte de dados, de modo que o erro pode ser reproduzido e postar uma nova pergunta.
AirSquid

Bem, talvez haja um problema com esta abordagem global. Eu só consertou com a "escolha" de comando e eu não posso obtê-lo para carregar um indivíduo definido corretamente. Ele pode fazer um parâmetro indexado como na documentação, mas eu não posso fazê-lo funcionar para um conjunto. Você pode querer considerar uma estrutura de dados diferente, que é mais previsível.
AirSquid

Em outros idiomas

Esta página está em outros idiomas

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