我的csv文件中的timestamp
列出现问题。
ValueError:无法将字符串转换为float:'2020-02-21 22:00:00'
对于这一行:
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from datetime import datetime
from statsmodels.tools.eval_measures import rmse
from sklearn.preprocessing import MinMaxScaler
from keras.preprocessing.sequence import TimeseriesGenerator
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
import warnings
warnings.filterwarnings("ignore")
"Import dataset"
df = pd.read_csv('fx_intraday_1min_GBP_USD.csv')
train, test = df[:-3], df[-3:]
scaler = MinMaxScaler()
scaler.fit(train) <----------- This line
train = scaler.transform(train)
test = scaler.transform(test)
n_input = 3
n_features = 4
generator = TimeseriesGenerator(train, train, length=n_input, batch_size=6)
model = Sequential()
model.add(LSTM(200, activation='relu', input_shape=(n_input, n_features)))
model.add(Dropout(0.15))
model.add(Dense(1))
model.compile(optimizers='adam', loss='mse')
model.fit_generator(generator, epochs=180)
如何将timestamp
列(最好是在读取csv时)转换为浮点数?
链接到数据集:https://www.alphavantage.co/query?function=FX_INTRADAY&from_symbol=GBP&to_symbol=USD&interval=1min&apikey=OF7SE183CNQLT9DW&datatype=csv
参考方案
读取数据时在CSV输入列上执行转换
读入CSV数据,将转换应用于timestamp列以获取浮点值:
>>> df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv',
... converters={'timestamp':
... lambda t: pd.Timestamp(t).timestamp()})
>>> df
timestamp open high low close
0 1.582322e+09 1.2953 1.2964 1.2953 1.2964
1 1.582322e+09 1.2955 1.2957 1.2952 1.2957
2 1.582322e+09 1.2956 1.2958 1.2954 1.2957
3 1.582322e+09 1.2957 1.2958 1.2954 1.2957
4 1.582322e+09 1.2957 1.2958 1.2955 1.2956
.. ... ... ... ... ...
95 1.582317e+09 1.2966 1.2967 1.2964 1.2965
96 1.582317e+09 1.2967 1.2968 1.2965 1.2966
97 1.582317e+09 1.2965 1.2967 1.2964 1.2966
98 1.582317e+09 1.2964 1.2967 1.2962 1.2966
99 1.582316e+09 1.2963 1.2965 1.2961 1.2964
[100 rows x 5 columns]
这也可以应用于其他列。 converters
参数采用字典,键为列名,值为函数。
如果时间戳数据跨越一列以上或采用某种奇怪的格式,则date_parser
可能很有用。回调可以从一列或多列接收文本以进行处理。 parse_dates
参数可能需要与date_parser
一起提供,以指示将回调应用于哪些列。 date_parser
只是列名称或索引的列表。用法示例:
df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv',
date_parser=lambda t: pd.Timestamp(t),
parse_dates=['timestamp'])
没有日期/时间参数的pd.read_csv()
会生成object
类型的时间戳列。使用parse_dates
只需指定哪一列是时间戳,而没有其他附加参数可以解决:
>>> df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv',
parse_dates=['timestamp'])
>>> df.dtypes
timestamp datetime64[ns]
open float64
high float64
low float64
close float64
读取CSV后的DataFrame列转换
正如另一个用户建议的那样,还有另一种使用pd.to_datetime()
转换列内容的方法。
>>> df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv')
>>> df.dtypes
timestamp object
open float64
high float64
low float64
close float64
dtype: object
>>> df['timestamp'] = pd.to_datetime(df['timestamp'])
>>> df.dtypes
timestamp datetime64[ns]
open float64
high float64
low float64
close float64
dtype: object
>>>
>>> df['timestamp'] = df['timestamp'].apply(lambda t: t.timestamp())
>>> df
timestamp open high low close
0 1.582322e+09 1.2953 1.2964 1.2953 1.2964
1 1.582322e+09 1.2955 1.2957 1.2952 1.2957
2 1.582322e+09 1.2956 1.2958 1.2954 1.2957
3 1.582322e+09 1.2957 1.2958 1.2954 1.2957
4 1.582322e+09 1.2957 1.2958 1.2955 1.2956
.. ... ... ... ... ...
95 1.582317e+09 1.2966 1.2967 1.2964 1.2965
96 1.582317e+09 1.2967 1.2968 1.2965 1.2966
97 1.582317e+09 1.2965 1.2967 1.2964 1.2966
98 1.582317e+09 1.2964 1.2967 1.2962 1.2966
99 1.582316e+09 1.2963 1.2965 1.2961 1.2964
[100 rows x 5 columns]
或者不使用pd.to_datetime()
一次完成所有操作:
>>> df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv')
>>>
>>> df['timestamp'] = df['timestamp'] \
... .apply(lambda t: pd.Timestamp(t).timestamp())
>>>
从iPython运行ga.read_ga问题 - python从iPython Notebook运行代码时遇到了问题。这是运行的代码:import pandas.io.ga as ga import gflags df = ga.read_ga(['visits', 'avgTimeOnSite'], dimensions=['date', 'hou…
Python-比较两个csv文件中的重复值,并将行写入单独的csv文件中 - python我有2个.csv文件,它们具有数千行数据(来自供应商的产品库存)。我需要找到重复的商品并删除价格较高的商品。问题是价格包含小数。以下代码是我根据需要完成的最接近的代码:with open('vendor1.csv', 'r') as venOne, open('vendor2.csv', '…
csv.DictReader / csv.DictWriter vs熊猫库数据框- - python我试图用Python编写一个程序,该程序将:从CSV文件读取数据,数据按日期排序通过查找最近365天(从csv文件中的最后一个数据点的日期起过去365天)来选择一些键和值,然后导出到另一个csv new_file根据写入new_file的数据绘制线形图(导出为图像文件)我是Python的新手,一直在研究:csv.DictReader(csv_file) / …
使用python中的多个定界符解析csv - python我有一个csv,其头(row [0])用空格隔开,但其余行的内容用\ t隔开(许多单元格有多个空格)。如何解析此csv? 参考方案 您可以像以前一样解析csv(全部内容),然后使用regex(正则表达式)来保留或划分和分类所需的内容。
Python csv.reader()转换为JS吗? - javascript我有一个python代码,例如:import csv reader = csv.reader(open('myText.txt', 'r'), delimiter=",") for row in reader: print row[0] + 'is' + row[1] + …