2

我有一个价格表,其中包含 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"]
4

1 回答 1

1

首先,您将索引作为 CSV 中的第一列(即 0、1、2、3、4...),但您在 CSV 的第一行中没有此列的列名,所以您需要将其名称添加到 CSV(第一行)的标题中,只需将其命名为“索引”,以便第一个修改的 CSV 行看起来像Index Date Time o h l c v.

第二件事是,看起来您的 CSV 中有制表符而不是逗号作为单元格分隔符,因此您需要在 read_csv 中将其指定为sep = '\t'ie pd.read_csv('test.csv', sep = '\t', parse_dates = [['Date', 'Time']])

下面是一个工作更正的例子,我做了我的例子,sep = ','因为标签被 StackOverflow 从文本中删除,我无法显示它们。对于您的情况,只需修改sep = ','sep = '\t'inside read_csv(...)。您可以在我的示例中看到,我的 csv 包含Index在第一行 csv 行的开头添加。同样在我的示例的开头,我有测试 csv 文件写入块,你不需要这个块,因为你已经有了你的文件。

总而言之,您必须做两件事:

  1. 编辑您的 CSV 文件并插入到开头单词Index加选项卡的第一行。
  2. 如果您有制表符分隔的 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
于 2020-11-07T10:04:20.830 回答