【问题标题】:How do I solve this error? TypeError: float() argument must be a string or a number, not 'Timestamp'我该如何解决这个错误? TypeError:float() 参数必须是字符串或数字,而不是“时间戳”
【发布时间】:2024-05-02 07:00:02
【问题描述】:

对于下面的代码,我可以做什么?好吧,我正在使用 LSTM 构建一个股票预测模型,每次我尝试运行下面的代码来规范化新的过滤数据集时,我都会在代码之后得到如下所示的错误;

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    from keras.models import Sequential
    from keras.layers import LSTM,Dropout,Dense
    from matplotlib.pylab import rcParams
    rcParams['figure.figsize']=20,10
    from sklearn.preprocessing import MinMaxScaler
    scaler=MinMaxScaler(feature_range=(0,1))

    scaler=MinMaxScaler(feature_range=(0,1))
    final_dataset=new_dataset.values

    train_data=final_dataset[0:987,:]
    valid_data=final_dataset[987:,:]

    new_dataset.index=new_dataset.Date
    new_dataset.drop("Date",axis=1,inplace=True)
    scaler=MinMaxScaler(feature_range=(0,1))
    scaled_data=scaler.fit_transform(final_dataset)

    x_train_data,y_train_data=[],[]

    for i in range(60,len(train_data)):
        x_train_data.append(scaled_data[i-60:i,0])
        y_train_data.append(scaled_data[i,0])

    x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data)

    x_train_data=np.reshape(x_train_data,(x_train_data.shape[0],x_train_data.shape[1],1))

每次我运行它时,我都会在下面收到这个错误,我尝试了几次更正它,但它不断弹出。 错误:

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
   <ipython-input-37-15343d926050> in <module>
      8 new_dataset.drop("Date",axis=1,inplace=True)
      9 scaler=MinMaxScaler(feature_range=(0,1))
---> 10 scaled_data=scaler.fit_transform(final_dataset)
     11 
     12 x_train_data,y_train_data=[],[]

   ~\anaconda3\lib\site-packages\sklearn\base.py in fit_transform(self, X, y, **fit_params)
       697         if y is None:
       698             # fit method of arity 1 (unsupervised transformation)
   --> 699             return self.fit(X, **fit_params).transform(X)
       700         else:
       701             # fit method of arity 2 (supervised transformation)

  ~\anaconda3\lib\site-packages\sklearn\preprocessing\_data.py in fit(self, X, y)
       361         # Reset internal state before fitting
       362         self._reset()
   --> 363         return self.partial_fit(X, y)
       364 
       365     def partial_fit(self, X, y=None):

    ~\anaconda3\lib\site-packages\sklearn\preprocessing\_data.py in partial_fit(self, X, y)
       394 
       395         first_pass = not hasattr(self, 'n_samples_seen_')
   --> 396         X = self._validate_data(X, reset=first_pass,
       397                                 estimator=self, dtype=FLOAT_DTYPES,
       398                                 force_all_finite="allow-nan")

   ~\anaconda3\lib\site-packages\sklearn\base.py in _validate_data(self, X, y, reset,       validate_separately, **check_params)
       419             out = X
       420         elif isinstance(y, str) and y == 'no_validation':
   --> 421             X = check_array(X, **check_params)
       422             out = X
       423         else:

   ~\anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs)
       61             extra_args = len(args) - len(all_args)
       62             if extra_args <= 0:
  ---> 63                 return f(*args, **kwargs)
       64 
       65             # extra_args > 0

    ~\anaconda3\lib\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, estimator)
      614                     array = array.astype(dtype, casting="unsafe", copy=False)
      615                 else:
  --> 616                     array = np.asarray(array, order=order, dtype=dtype)
      617             except ComplexWarning as complex_warning:
      618                 raise ValueError("Complex data not supported\n"

    ~\AppData\Roaming\Python\Python38\site-packages\numpy\core\_asarray.py in asarray(a, dtype, order)
      81 
      82     """
 ---> 83     return array(a, dtype, copy=False, order=order)
      84 
      85 

 TypeError: float() argument must be a string or a number, not 'Timestamp'

【问题讨论】:

    标签: pandas numpy keras


    【解决方案1】:

    sklearn 需要浮点值,即数字,而你给它的是 Timestamp 对象。错误TypeError: float() argument must be a string or a number, not 'Timestamp 表示python 内置float() 现在不知道如何将时间戳转换为浮点数。

    为避免此问题,您可以自己将时间戳转换为数字,然后再将它们传递给您的函数。

    • 如果所有日期都 ≥ 1970 并且您希望分辨率小于一天,请使用 timestamp
      new_dataset['Date'] = new_dataset['Date'].apply(pd.Timestamp.timestamp)
      
    • 如果您最多有一个每日解决方案并且不希望有日期限制,请使用toordinal
      new_dataset['Date'] = new_dataset['Date'].apply(pd.Timestamp.toordinal)
      

    【讨论】:

      最近更新 更多