1
resposta

[Dúvida] problema em converter uma string para time(??)

from sklearn.svm import LinearSVC

modelo = LinearSVC()
*modelo.fit(treino_x, treino_y)*
previsoes = modelo.predict(teste_x)
|QTD SENHAS	|Grupo	|Unidade	|Prioridade|	Data|	Senha|	Serv. Triado	|Status	|Chegada|	Chamada	Incio	|Fim	|TE	|TME	|DP	|TD|	TA|	TP|	Tpa|	TS

| 0	1|	********* |	******|	Normal|	25/11/2022|	NB0001|	Geral|	Cancelada	|16:45:23|	16:50:53|	0	|16:51:15|	00:05:30|	00:05:30	|38.63%	0	|00:00:23|	00:05:52|	00:00:00|	00:00:00

o erro apresentado é em praticamente todas as colunas onde há hora (desvio padrão).


ValueError                                Traceback (most recent call last)
<ipython-input-55-187d646bf70d> in <module>
      2 
      3 modelo = LinearSVC()
----> 4 modelo.fit(treino_x, treino_y)
      5 previsoes = modelo.predict(teste_x)

4 frames
/usr/local/lib/python3.8/dist-packages/pandas/core/generic.py in __array__(self, dtype)
   1991 
   1992     def __array__(self, dtype: NpDtype | None = None) -> np.ndarray:
-> 1993         return np.asarray(self._values, dtype=dtype)
   1994 
   1995     def __array_wrap__(

ValueError: could not convert string to float: '00:05:30'

não sei como converter nesses casos.

podem me ajudar? Obrigado

1 resposta

Olá Felipe, tudo bem com você?

O erro que você está enfrentando, 'ValueError: could not convert string to float', ocorre porque o LinearSVC do scikit-learn espera que os dados de entrada sejam numéricos, você está fornecendo dados de formato de string (por exemplo, '00:05:30').

Uma maneira de lidar com isso seria converter essas strings de tempo em um formato numérico que o modelo possa entender. Uma abordagem comum é converter o tempo em segundos.

Por exemplo, se você tem um tempo como '00:05:30', você pode convertê-lo em segundos da seguinte maneira:

def convert_time_to_seconds(time_str):
    h, m, s = map(int, time_str.split(':'))
    return h*3600 + m*60 + s

time_str = '00:05:30'
time_in_seconds = convert_time_to_seconds(time_str)
time_in_seconds  # Saída: 330

Agora, você pode substituir as colunas de tempo em seu DataFrame com os tempos convertidos em segundos. Aqui está um exemplo de como você pode fazer isso para a coluna 'TE':

df['TE'] = df['TE'].apply(convert_time_to_seconds)

Lembre-se de fazer isso para todas as colunas que contêm tempo em seu DataFrame antes de alimentá-lo para o modelo. Após realizar a conversão, faça o uso do LinearSVC

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!