Python 如何使用pandas.read\u csv()的date\u解析器参数

Python 如何使用pandas.read\u csv()的date\u解析器参数,python,pandas,dataframe,Python,Pandas,Dataframe,我的csv文件中的时间戳列出现问题 ValueError:无法将字符串转换为浮点:“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

我的csv文件中的
时间戳
列出现问题

ValueError:无法将字符串转换为浮点:“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)
将numpy导入为np
作为pd进口熊猫
将matplotlib.pylab作为plt导入
从日期时间导入日期时间
从statsmodels.tools.eval_度量导入rmse
从sklearn.preprocessing导入MinMaxScaler
从keras.preprocessing.sequence导入TimeseriesGenerator
从keras.models导入顺序
从keras.layers导入稠密
从keras.layers导入LSTM
从keras.layers导入退出
进口警告
警告。过滤器警告(“忽略”)
“导入数据集”
df=pd.read\u csv('fx\u日内\u 1分钟\u英镑\u美元.csv')
列车,测试=df[:-3],df[-3:]
scaler=MinMaxScaler()

scaler.fit(train)看起来您正在尝试将字符串转换为Datetime对象

为此,您需要使用
datetime.strtime
和格式化字符串作为第二个参数。此字符串需要与csv文件中的日期格式匹配

因此,您需要以下代码将时间字符串转换为Datetime对象:

from datetime import datetime

df = pd.read_csv('intraday.csv')
dftime = datetime.strptime(df, '%Y-%m-%d %H:%M:%S')
在此之后,您可以使用
dftime
执行任何您想执行的操作。如果希望它是浮点(或时间戳),可以使用以下代码:

timestamp = datetime.timestamp(dftime)

我希望这有帮助:)

您可以使用pandas方法将整个列转换为datetime:

作为pd进口熊猫

pd.to_日期时间(列)

如果要将此列作为索引,请使用:

pd.设置索引(列)

在读取数据时对CSV输入列执行转换 读取CSV数据,将转换应用于时间戳列以获取浮点值:

>>> 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\u解析器
在时间戳数据跨越多个列或采用某种奇怪格式时可能很有用。回调可以从一个或多个列接收文本进行处理。
parse_dates
参数可能需要与
date_parser
一起提供,以指示要对哪些列应用回调
date\u解析器
只是列名或索引的列表。用法示例:

df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv', 
                 date_parser=lambda t: pd.Timestamp(t), 
                 parse_dates=['timestamp'])
pd.read\u 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中读取数据帧列后的转换 正如另一位用户所建议的,有另一种方法可以使用
pd.将列的内容转换为\u datetime()

或者一次完成所有操作而不必使用pd.to_datetime()


您正在尝试将datetime列转换为float吗?是的,csv附带了上述格式的时间戳列。您正在寻找unix时间格式吗?我正在使用minmax scaler和lstm不确定什么是最好的?列中的所有时间戳字符串是否都是完全相同的格式?我得到错误消息strTime()参数1必须是str,而不是dataframe@GGr,不要将整个帧传递给strtime()函数-例如,Aiden只是这样做的。这里的一个用户发布了一个看起来很有希望的答案,但删除了它=(是的,我从来没有第二次机会说等下推断的日期时间回来了好吧,我在运行我的整个手机,而不是运行section@GGr因此,使用
infere\u datetime\u format=True
解决了这个问题??它没有解决问题,它仍然是一个字符串而不是一个浮点。我只是没有从另一个问题中得到另一个错误。@GGr-好的。我已经更新了这个。我认为当你选择它作为答案时,答案可能是不正确的,但是我做了一些实验,并且我想出了我认为有效的方法。见上文。虽然这提供了一些线索,但信息还不够。
>>> 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]
>>> df = pd.read_csv('~/Downloads/fx_intraday_1min_GBP_USD.csv')
>>>
>>> df['timestamp'] = df['timestamp'] \
...                      .apply(lambda t: pd.Timestamp(t).timestamp())
>>>