鱼C论坛

 找回密码
 立即注册
查看: 932|回复: 9

在深度学习中读取csv数据时遇到的问题

[复制链接]
发表于 2022-2-25 03:18:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在学习LSTM模型时,读取一个csv数据文件,里面包含有日期时间数据,用pandas读取时报错了:ValueError: could not convert string to float: '2017-01-01 00:00:00'
请问是怎么一回事呢?是因为包含空格吗?还是其他字符?请各位高手帮忙解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-25 08:11:35 | 显示全部楼层
贴下读取的代码看看撒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-25 13:21:47 | 显示全部楼层
rsj0315 发表于 2022-2-25 08:11
贴下读取的代码看看撒

df_data_5minute=pd.read_csv('raw_data.csv',error_bad_lines=False,encoding='gbk',lineterminator="\n" ,encoding_errors='ignore')
df_data_5minute.drop('Wind_plant', axis=1, inplace=True)


df=df_data_5minute
#df.drop(labels=['close'], axis=1,inplace = True)
#df.insert(0, 'close', close)
data_train =df.iloc[:30000, :]
data_test = df.iloc[30000:, :]
print(data_train.shape, data_test.shape)


scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit(data_train)

data_train = scaler.transform(data_train)
data_test = scaler.transform(data_test)


output_dim = 1
batch_size = 1000
epochs = 500
seq_len = 5
hidden_size = 128


TIME_STEPS = 5
INPUT_DIM = 14

lstm_units = 64
X_train = np.array([data_train[i : i + seq_len, :] for i in range(data_train.shape[0] - seq_len)])
y_train = np.array([data_train[i + seq_len, 0] for i in range(data_train.shape[0]- seq_len)])
X_test = np.array([data_test[i : i + seq_len, :] for i in range(data_test.shape[0]- seq_len)])
y_test = np.array([data_test[i + seq_len, 0] for i in range(data_test.shape[0] - seq_len)])
maxy=y_test.max();
miny=y_test.min();
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

inputs = Input(shape=(TIME_STEPS, INPUT_DIM))

x = Conv1D(filters = 32, kernel_size = 1, activation = 'relu')(inputs)  #, padding = 'same'
x = MaxPooling1D(pool_size = 5)(x)
x = Dropout(0.1)(x)

lstm_out = Bidirectional(LSTM(lstm_units, activation='relu'), name='bilstm')(x)

output = Dense(1, activation='sigmoid')(lstm_out)

model = Model(inputs=inputs, outputs=output)

model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, shuffle=False)
model.save('model.h5')
#model=load_model('model.h5')


y_pred = model.predict(X_test)



data_train=scaler.inverse_transform(data_train);
data_test=scaler.inverse_transform(data_test);
y_test = np.array([data_test[i + seq_len, 0] for i in range(data_test.shape[0] - seq_len)])
y_train = np.array([data_train[i + seq_len, 0] for i in range(data_train.shape[0]- seq_len)])
y_raw=np.hstack((y_train,y_test))

#RMSE
print('MSE Train loss:', model.evaluate(X_train, y_train, batch_size=batch_size))
print('MSE Test loss:', model.evaluate(X_test, y_test, batch_size=batch_size))
Rmse = sqrt(mean_squared_error(y_test, y_pred))
print('RMSE: ', Rmse)


plt.plot(np.arange(len(y_raw)), np.hstack((y_train,y_test)) , 'b', label="Raw Data")
plt.plot(np.arange(len(y_train),len(y_raw)),y_pred,'r', label="Prediction")
plt.legend()
plt.show()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-25 14:54:09 | 显示全部楼层
有没有大神帮忙解答一下啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-25 14:56:40 | 显示全部楼层
rplt 发表于 2022-2-25 14:54
有没有大神帮忙解答一下啊

把报错信息贴详细点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-25 20:30:25 | 显示全部楼层
想把数据直接读取成日期时间的,记得加参数dtype={'时间所在列名称':np.datetime64}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-26 01:47:18 | 显示全部楼层
isdkz 发表于 2022-2-25 14:56
把报错信息贴详细点

(30000, 20) (5040, 20)
Traceback (most recent call last):
  File "C:\Users\lenovo\Desktop\LSTM\Tensorflow-Wind-Power-Prediction-master\Tensorflow-Wind-Power-Prediction-master\main.py", line 32, in <module>
    scaler.fit(data_train)
  File "E:\anaconda\envs\tensorflow\lib\site-packages\sklearn\preprocessing\_data.py", line 416, in fit
    return self.partial_fit(X, y)
  File "E:\anaconda\envs\tensorflow\lib\site-packages\sklearn\preprocessing\_data.py", line 453, in partial_fit
    X = self._validate_data(
  File "E:\anaconda\envs\tensorflow\lib\site-packages\sklearn\base.py", line 566, in _validate_data
    X = check_array(X, **check_params)
  File "E:\anaconda\envs\tensorflow\lib\site-packages\sklearn\utils\validation.py", line 746, in check_array
    array = np.asarray(array, order=order, dtype=dtype)
  File "E:\anaconda\envs\tensorflow\lib\site-packages\pandas\core\generic.py", line 1993, in __array__
    return np.asarray(self._values, dtype=dtype)
ValueError: could not convert string to float: '2017-01-01 00:00:00'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-26 13:17:47 | 显示全部楼层
rplt 发表于 2022-2-25 14:54
有没有大神帮忙解答一下啊

df_data_5minute=pd.read_csv('raw_data.csv',error_bad_lines=False,encoding='gbk',lineterminator="\n" ,encoding_errors='ignore')   老哥是直接在这个语句后面加吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-26 17:23:23 | 显示全部楼层
本帖最后由 cflying 于 2022-2-26 17:28 编辑

你还没懂,对于“2017-01-01 00:00:00”这种数据,pandas默认读出来的是object,也就是python的str字符串,你要是能转换成float运算才奇了怪了,


df_data_5minute=pd.read_csv('raw_data.csv',dtype={'时间所在列名称':np.datetime64})加上这个则可以直接读取成日期时间,把np.date那个换成float则直接为float(劝你别直接试,“2017-01-01 00:00:00”这玩意儿就算你写了float也要报错,没法直接转换的格式肯定要报错),建议你就弄成日期时间进行处理

如果你的数据直接是1.111,2.34等等的话,你不用加dtpye直接读出来就是float,当然,也可以直接dtype={'时间所在列名称':object}读取为object

不信你可以用df.info()。读出来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-26 22:35:16 From FishC Mobile | 显示全部楼层
cflying 发表于 2022-2-26 17:23
你还没懂,对于“2017-01-01 00:00:00”这种数据,pandas默认读出来的是object,也就是python的s ...

好的谢谢老哥 这种关于数据处理我该怎么学啊老哥是找书看 还是上csdn找例子看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 10:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表