m0_74420115 2024-04-28 21:14 采纳率: 71.9%
浏览 9
已结题

为什么我的csv文件中有close列还跟我报错说没有close列

在我的D盘下的data.csv文件中是有close列的,为什么jupyter跟我报错说data.csv文件中没有close这一列

import pandas as pd
 
df = pd.read_csv('D:/data.csv')
df.rename(columns={"Date": "date", "Open": "open", "High": "high", "Low": "low", "Close": "close", "Volume": "volume"}, inplace=True)
df.set_index('date', inplace=True)
df.sort_values(by='date', inplace=True)
 
def Stock_Price_LSTM_Data_Precesing(df,mem_his_days,pre_days):
    df.dropna(inplace=True)
    df.sort_index(inplace=True)
    df['label']= df['Close'].shift(-pre_days)
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    sca_X=scaler.fit_transform(df.iloc[:,:-1])   
    mem_his_days = 10
    
    from collections import deque
    deq = deque(maxlen=mem_his_days)
    
    X = []
    for i in sca_X:
        deq.append(list(i))
        if len(deq)==mem_his_days:
            X.append(list(deq))
    X_lately = X[-pre_days:]
    X = X[:-pre_days]
    y = df['label'].values[mem_his_days-1:-pre_days]
    
    
    import numpy as np
    X = np.array(X)
    y = np.array(y)
    return X,y,X_lately
 
X,y,X_lately = Stock_Price_LSTM_Data_Precesing(df,5,10)
print(len(X))
print(len(y))
print(len(X_lately))
 
pre_days = 10
mem_days=[5,10,15]
lstm_layers=[1,2,3]
dense_layers=[1,2,3]
units = [16,32]
 
from tensorflow.keras.callbacks import ModelCheckpoint
 
for the_mem_days in mem_days:
    for the_lstm_layers in lstm_layers:
        for the_dense_layers in dense_layers:
            for the_units in units:
                filepath="./minedata/{val_mape:.2f}_{epoch:02d}_men_1_lstm_1_dense_1_unit_16.weights.h5"
                checkpoint = ModelCheckpoint(
                    filepath=filepath,
                    save_weights_only=True,
                    monitor='val_mape',
                    mode='min',
                    save_best_only=True)
                X,y,X_lately = Stock_Price_LSTM_Data_Precesing(df,the_mem_days,pre_days)
                from sklearn.model_selection import train_test_split
                X_train,X_test,y_train,y_test = train_test_split(X,y,shuffle=False,test_size=0.1)
                import tensorflow as tf
                from tensorflow.keras.models import Sequential
                from tensorflow.keras.layers import LSTM,Dense,Dropout
                model = Sequential()
                model.add(LSTM(the_units,input_shape=X.shape[1:],activation='relu',return_sequences=True))
                model.add(Dropout(0.1))
                for i in range(the_lstm_layers):
                    model.add(LSTM(the_units,activation='relu',return_sequences=True))
                    model.add(Dropout(0.1))
                
                model.add(LSTM(the_units,activation='relu'))
                model.add(Dropout(0.1))
                for i in range(the_dense_layers):
                    model.add(Dense(the_units,activation='relu'))
                    model.add(Dropout(0.1))
                
                model.add(Dense(1))
                model.compile(optimizer='adam',
                             loss='mse',
                             metrics=['mape'])
                model.fit(X_train,y_train,batch_size=32,epochs=50,validation_data=(X_test,y_test),callbacks=[checkpoint])

这是错误报告

KeyError                                  Traceback (most recent call last)
File D:\anaconda\Lib\site-packages\pandas\core\indexes\base.py:3791, in Index.get_loc(self, key)
   3790 try:
-> 3791     return self._engine.get_loc(casted_key)
   3792 except KeyError as err:

File index.pyx:152, in pandas._libs.index.IndexEngine.get_loc()

File index.pyx:181, in pandas._libs.index.IndexEngine.get_loc()

File pandas\_libs\hashtable_class_helper.pxi:7080, in pandas._libs.hashtable.PyObjectHashTable.get_item()

File pandas\_libs\hashtable_class_helper.pxi:7088, in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Close'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
Cell In[6], line 35
     32     y = np.array(y)
     33     return X,y,X_lately
---> 35 X,y,X_lately = Stock_Price_LSTM_Data_Precesing(df,5,10)
     36 print(len(X))
     37 print(len(y))

Cell In[6], line 11, in Stock_Price_LSTM_Data_Precesing(df, mem_his_days, pre_days)
      9 df.dropna(inplace=True)
     10 df.sort_index(inplace=True)
---> 11 df['label']= df['Close'].shift(-pre_days)
     12 from sklearn.preprocessing import StandardScaler
     13 scaler = StandardScaler()

File D:\anaconda\Lib\site-packages\pandas\core\frame.py:3893, in DataFrame.__getitem__(self, key)
   3891 if self.columns.nlevels > 1:
   3892     return self._getitem_multilevel(key)
-> 3893 indexer = self.columns.get_loc(key)
   3894 if is_integer(indexer):
   3895     indexer = [indexer]

File D:\anaconda\Lib\site-packages\pandas\core\indexes\base.py:3798, in Index.get_loc(self, key)
   3793     if isinstance(casted_key, slice) or (
   3794         isinstance(casted_key, abc.Iterable)
   3795         and any(isinstance(x, slice) for x in casted_key)
   3796     ):
   3797         raise InvalidIndexError(key)
-> 3798     raise KeyError(key) from err
   3799 except TypeError:
   3800     # If we have a listlike key, _check_indexing_error will raise
   3801     #  InvalidIndexError. Otherwise we fall through and re-raise
   3802     #  the TypeError.
   3803     self._check_indexing_error(key)

KeyError: 'Close'

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-28 21:14
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试从CSV文件中读取数据并进行预处理,但是在执行df['label'] = df['Close'].shift(-pre_days)这行代码时遇到了KeyError: 'Close'的错误。这个错误意味着在DataFrame df 中找不到名为 'Close' 的列。

    为了解决这个问题,我们需要确保你的CSV文件确实包含名为 'Close' 的列。你可以通过简单地检查CSV文件内容或者在加载数据后打印DataFrame的列名来确认这一点。

    首先,确保你的CSV文件中确实有 'Close' 这一列。然后,如果你仍然遇到问题,可能是数据加载过程中出现了问题。可以试着不进行重命名操作,先直接加载原始CSV文件,看是否能正确读取到 'Close' 列。以下是简化版的代码,用于加载CSV文件并检查列名:

    import pandas as pd
    
    # 加载CSV文件,不进行列名重命名
    df = pd.read_csv('D:/data.csv')
    
    # 打印DataFrame的列名
    print(df.columns)
    

    运行这段代码后,你应该能看到所有列名。如果 'Close' 不在这个列表里,那么你需要检查CSV文件本身,确保它包含了正确的列名。如果 'Close' 在列表里,但还是报错,那可能是在后续处理中发生了意外的列删除或重命名。请确保在进行任何列操作之前,例如重命名、删除或排序, 'Close' 列都存在。

    如果问题依然存在,请提供更详细的CSV文件样本以及完整的列名输出,这样我可以更好地协助你找到问题所在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 4月28日