backtrader time column : ValueError: time data '0' does not match format '%Y-%m-%d %H:%M:%S'
backtrader time column : ValueError: time data '0' does not match format '%Y-%m-%d %H:%M:%S'
我有一个价格 table,其中包含 csv 格式的日期和时间:
Date Time o h l c v
0 2020-07-09 15:10:00 8 8 7.5 7.94 41
1 2020-07-09 15:00:00 7.61 8.24 7.61 8.24 10
2 2020-07-09 14:50:00 8.3 8.3 7.7 7.7 7
3 2020-07-09 14:40:00 8.72 8.72 8.3 8.3 7
4 2020-07-09 14:30:00 8.72 8.72 8.39 8.39 8
5 2020-07-09 14:20:00 8.35 8.6 8.3 8.6 6
6 2020-07-09 14:10:00 8.18 8.46 8.18 8.45 22
7 2020-07-09 14:00:00 8.5 8.5 8.5 8.5 1
ValueError:时间数据“0”与格式“%Y-%m-%d %H:%M:%S”不匹配
这是我从 运行 这些代码片段中得到的错误。
data = bt.feeds.GenericCSVData(dataname='ticks2.csv',
params = (
('nullvalue', float('NaN')),
('dtformat', '%Y/%m/%d'),# %H:%M:%S
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', 1),
('open', 2),
('high', 3),
('low', 4),
('close', 5),
('volume', 6),
我尝试合并日期和时间列来解决这个问题
但无济于事...因为错误保持不变。
df = pd.read_csv('ticks.csv', parse_dates=[['Date', 'Time']])
print(df)
del df["Unnamed: 0"]
首先,您将索引作为 CSV 中的第一列(即 0、1、2、3、4...),但您的第一列中没有此列的列名CSV 行,因此您需要将其名称添加到 CSV 的 header 中(第一行),只需将其命名为“Index”,以便第一个修改的 CSV 行应该看起来像 Index Date Time o h l c v
.
第二件事是,您的 CSV 文件中似乎有制表符而不是逗号作为单元格分隔符,因此您需要在 read_csv 中将其指定为 sep = '\t'
,即 pd.read_csv('test.csv', sep = '\t', parse_dates = [['Date', 'Time']])
。
下面是一个有效的更正示例,我针对 sep = ','
的情况做了我的示例,因为 Whosebug 从文本中删除了选项卡,我无法显示它们。对于您的情况,只需在 read_csv(...)
内将 sep = ','
修改为 sep = '\t'
。您可以在我的示例中看到,我的 csv 在第一个 csv 行的开头包含添加的 Index
。同样在我的例子的开头,我有测试 csv 文件写入块,你不需要这个块,因为你已经有了你的文件。
总而言之,您必须做两件事:
- 编辑您的 CSV 文件并插入第一行的开头单词
Index
加上制表符。
- 如果您有制表符分隔的 CSV 并且看起来像您有,请将
sep = '\t'
添加到您的 read_csv(...)
。
# This file-writing block is not needed, it is to create example file
with open('test.csv', 'w', encoding = 'utf-8') as f:
f.write("""
Index,Date,Time,o,h,l,c,v
0,2020-07-09,15:10:00,8,8,7.5,7.94,41
1,2020-07-09,15:00:00,7.61,8.24,7.61,8.24,10
2,2020-07-09,14:50:00,8.3,8.3,7.7,7.7,7
3,2020-07-09,14:40:00,8.72,8.72,8.3,8.3,7
4,2020-07-09,14:30:00,8.72,8.72,8.39,8.39,8
5,2020-07-09,14:20:00,8.35,8.6,8.3,8.6,6
6,2020-07-09,14:10:00,8.18,8.46,8.18,8.45,22
7,2020-07-09,14:00:00,8.5,8.5,8.5,8.5,1
""")
# This code is needed to solve task
# Change to "sep = '\t'" for your case of tab-separated CSV
import pandas as pd
df = pd.read_csv('test.csv', sep = ',', parse_dates = [['Date', 'Time']])
print(df)
输出:
Date_Time Index o h l c v
0 2020-07-09 15:10:00 0 8.00 8.00 7.50 7.94 41
1 2020-07-09 15:00:00 1 7.61 8.24 7.61 8.24 10
2 2020-07-09 14:50:00 2 8.30 8.30 7.70 7.70 7
3 2020-07-09 14:40:00 3 8.72 8.72 8.30 8.30 7
4 2020-07-09 14:30:00 4 8.72 8.72 8.39 8.39 8
5 2020-07-09 14:20:00 5 8.35 8.60 8.30 8.60 6
6 2020-07-09 14:10:00 6 8.18 8.46 8.18 8.45 22
7 2020-07-09 14:00:00 7 8.50 8.50 8.50 8.50 1
我有一个价格 table,其中包含 csv 格式的日期和时间:
Date Time o h l c v
0 2020-07-09 15:10:00 8 8 7.5 7.94 41
1 2020-07-09 15:00:00 7.61 8.24 7.61 8.24 10
2 2020-07-09 14:50:00 8.3 8.3 7.7 7.7 7
3 2020-07-09 14:40:00 8.72 8.72 8.3 8.3 7
4 2020-07-09 14:30:00 8.72 8.72 8.39 8.39 8
5 2020-07-09 14:20:00 8.35 8.6 8.3 8.6 6
6 2020-07-09 14:10:00 8.18 8.46 8.18 8.45 22
7 2020-07-09 14:00:00 8.5 8.5 8.5 8.5 1
ValueError:时间数据“0”与格式“%Y-%m-%d %H:%M:%S”不匹配
这是我从 运行 这些代码片段中得到的错误。
data = bt.feeds.GenericCSVData(dataname='ticks2.csv',
params = (
('nullvalue', float('NaN')),
('dtformat', '%Y/%m/%d'),# %H:%M:%S
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', 1),
('open', 2),
('high', 3),
('low', 4),
('close', 5),
('volume', 6),
我尝试合并日期和时间列来解决这个问题 但无济于事...因为错误保持不变。
df = pd.read_csv('ticks.csv', parse_dates=[['Date', 'Time']])
print(df)
del df["Unnamed: 0"]
首先,您将索引作为 CSV 中的第一列(即 0、1、2、3、4...),但您的第一列中没有此列的列名CSV 行,因此您需要将其名称添加到 CSV 的 header 中(第一行),只需将其命名为“Index”,以便第一个修改的 CSV 行应该看起来像 Index Date Time o h l c v
.
第二件事是,您的 CSV 文件中似乎有制表符而不是逗号作为单元格分隔符,因此您需要在 read_csv 中将其指定为 sep = '\t'
,即 pd.read_csv('test.csv', sep = '\t', parse_dates = [['Date', 'Time']])
。
下面是一个有效的更正示例,我针对 sep = ','
的情况做了我的示例,因为 Whosebug 从文本中删除了选项卡,我无法显示它们。对于您的情况,只需在 read_csv(...)
内将 sep = ','
修改为 sep = '\t'
。您可以在我的示例中看到,我的 csv 在第一个 csv 行的开头包含添加的 Index
。同样在我的例子的开头,我有测试 csv 文件写入块,你不需要这个块,因为你已经有了你的文件。
总而言之,您必须做两件事:
- 编辑您的 CSV 文件并插入第一行的开头单词
Index
加上制表符。 - 如果您有制表符分隔的 CSV 并且看起来像您有,请将
sep = '\t'
添加到您的read_csv(...)
。
# This file-writing block is not needed, it is to create example file
with open('test.csv', 'w', encoding = 'utf-8') as f:
f.write("""
Index,Date,Time,o,h,l,c,v
0,2020-07-09,15:10:00,8,8,7.5,7.94,41
1,2020-07-09,15:00:00,7.61,8.24,7.61,8.24,10
2,2020-07-09,14:50:00,8.3,8.3,7.7,7.7,7
3,2020-07-09,14:40:00,8.72,8.72,8.3,8.3,7
4,2020-07-09,14:30:00,8.72,8.72,8.39,8.39,8
5,2020-07-09,14:20:00,8.35,8.6,8.3,8.6,6
6,2020-07-09,14:10:00,8.18,8.46,8.18,8.45,22
7,2020-07-09,14:00:00,8.5,8.5,8.5,8.5,1
""")
# This code is needed to solve task
# Change to "sep = '\t'" for your case of tab-separated CSV
import pandas as pd
df = pd.read_csv('test.csv', sep = ',', parse_dates = [['Date', 'Time']])
print(df)
输出:
Date_Time Index o h l c v
0 2020-07-09 15:10:00 0 8.00 8.00 7.50 7.94 41
1 2020-07-09 15:00:00 1 7.61 8.24 7.61 8.24 10
2 2020-07-09 14:50:00 2 8.30 8.30 7.70 7.70 7
3 2020-07-09 14:40:00 3 8.72 8.72 8.30 8.30 7
4 2020-07-09 14:30:00 4 8.72 8.72 8.39 8.39 8
5 2020-07-09 14:20:00 5 8.35 8.60 8.30 8.60 6
6 2020-07-09 14:10:00 6 8.18 8.46 8.18 8.45 22
7 2020-07-09 14:00:00 7 8.50 8.50 8.50 8.50 1