1
resposta

Formato e valores da variável 'Tempo'

Boa tarde!

Estou com dúvida referente ao tipo da variável 'Tempo' e os valores que estão da base de dados planilha 'Passageiros.csv'.

Verifiquei o tipo de dados da coluna 'tempo' pelo Excel e diz que é do formato da célula é 'General'. Fiz a alteração para o formato de célula 'Date' para que os valores contidos sejam do mesmo formato de data que usamos no dia a dia (aaaa-mm-dd). Com esta alteração, os valores mudaram para 2 formatos : datetime e timestamp, por exemplo: '1905-05-02' (datetime) e '1905-05-02 2:00:00 AM' (timestamp).

Usei a planilha desta forma e na etapa de ajuste dos dados de treino ( fit() ) apareceu o seguinte erro :

  • raise ValueError("Complex data not supported\n"
  • ValueError: could not convert string to float: '1905-05-12'
regressor.fit(Tempo_treino, nPassageiros_treino)
# usando a função 'fit'para fazer o ajuste aos dados de treino
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-19-fc35ce26f8d3> in <module>
----> 1 regressor.fit(Tempo_treino, nPassageiros_treino)
      2 # usando a função 'fit'para fazer o ajuste aos dados de treino

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/_base.py in fit(self, X, y, sample_weight)
    490         n_jobs_ = self.n_jobs
    491         X, y = check_X_y(X, y, accept_sparse=['csr', 'csc', 'coo'],
--> 492                          y_numeric=True, multi_output=True)
    493 
    494         if sample_weight is not None:

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    753                     ensure_min_features=ensure_min_features,
    754                     warn_on_dtype=warn_on_dtype,
--> 755                     estimator=estimator)
    756     if multi_output:
    757         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    529                     array = array.astype(dtype, casting="unsafe", copy=False)
    530                 else:
--> 531                     array = np.asarray(array, order=order, dtype=dtype)
    532             except ComplexWarning:
    533                 raise ValueError("Complex data not supported\n"

~/opt/anaconda3/lib/python3.7/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     83 
     84     """
---> 85     return array(a, dtype, copy=False, order=order)
     86 
     87 

ValueError: could not convert string to float: '1905-05-12'

1) O que devo fazer para usar valores no formato de data no Excel (aaaa-mm-aa) que é mais usual e aplicável nos relatórios do dia a dia ?

2) A solução avaliada por vocês também funcionaria para extensão do Excel 'xlsx' ?

Agradeço desde já!

1 resposta

1) No caso onde carregamos o tempo no formato '1905-05-02' (datetime) temos que fazer uma conversão antes de continuar. Exemplo:

passageiros['tempo']=pd.to_datetime(passageiros['tempo'])
# e depois fazer
#Seleciona todas as colunas menos a última
Tempo = passageiros.iloc[:,:-1].values

Assim dentro do código estamos dizendo que temos o formato datetime64. Parte do erro que observou também se deve ao fato do pandas ler o '1905-05-02' como uma string.

#Seleciona todas as colunas menos a última Tempo = passageiros.iloc[:,:-1].values

Também é possível trabalhar com o formato '1905-05-02 2:00:00 AM' . Mas para cada tipo de formato específico recomendo consultar a documentação.

https://pandas.pydata.org/pandas-docs/version/0.23.1/generated/pandas.to_datetime.html

2) Para trabalhar com os arquivos no formato xlsx temos o pd.read_excel que funciona de forma parecida com read_csv. Aqui tem diversos exemplos de leitura de arquivos excel usando essa função. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html