2

我有一些 CSV 数据,例如

2011.12.08,22:45,1.33434,1.33465,1.33415,1.33419,265
2011.12.08,23:00,1.33419,1.33542,1.33419,1.33472,391
2011.12.08,23:15,1.33470,1.33483,1.33383,1.33411,420
2011.12.08,23:30,1.33413,1.33451,1.33389,1.33400,285

来自 Metatrader 4 的名为 EURUSD15.csv 的文件

我想用 Python 导入这个文件,使用 Pandas 库和 read_csv 函数......

所以我这样做了:

#!/usr/bin/env python
from pandas import *
df = read_csv('data/EURUSD15.csv', header=None)
df.columns = ['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']
print(df)

我现在想解析日期/时间...

所以我改变了

df = read_csv('data/EURUSD15.csv', header=None)

df = read_csv('data/EURUSD15.csv', header=None, parse_dates=[[1, 2]])

但我收到此错误消息

Exception: Length mismatch (7 vs 6)

如何解析日期和时间列并将 2 列视为 1 个“日期时间”列。

4

4 回答 4

1

这些列是零索引的,所以你需要这样做 这是在最新版本的熊猫上,但应该适用于 0.8.0+:parse_dates=[[0,1]]

In [74]: data = """\
2011.12.08,22:45,1.33434,1.33465,1.33415,1.33419,265
2011.12.08,23:00,1.33419,1.33542,1.33419,1.33472,391
2011.12.08,23:15,1.33470,1.33483,1.33383,1.33411,420
2011.12.08,23:30,1.33413,1.33451,1.33389,1.33400,285
"""

In [75]: pd.read_csv(StringIO(data), 
                     names=['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume'], 
                     index_col='Date_Time', parse_dates=[[0, 1]])
Out[75]: 
                        Open     High      Low    Close  Volume
Date_Time                                                      
2011-12-08 22:45:00  1.33434  1.33465  1.33415  1.33419     265
2011-12-08 23:00:00  1.33419  1.33542  1.33419  1.33472     391
2011-12-08 23:15:00  1.33470  1.33483  1.33383  1.33411     420
2011-12-08 23:30:00  1.33413  1.33451  1.33389  1.33400     285

请注意,这index_col=0也将起作用。复杂的日期解析将结果列放在前面,因此 parse_dates 将引用处理日期前的列索引(即,0 是日期,1 是时间)并index_col引用处理日期后的列索引。因此,建议使用列名,因为它使您不必考虑处理前后的列索引。

于 2012-07-27T08:29:34.860 回答
0

parse_dates 不采用索引值。

尝试类似:

pd.read_csv('data/EURUSD15.csv',  parse_dates = [['YYYY.MM.DD', 'HH:MM']], index_col = 0, 
        date_parser=parse)
于 2012-07-26T16:20:19.343 回答
0
parse = lambda x: datetime.strptime(x, '%d-%m-%Y %H:%M')
df = pd.read_csv('data/EURUSD15.csv', parse_dates=[[0, 1]], date_parser=parse, index_col=[0],   header=None)
keys = ['Open', 'High', 'Low', 'Close','Volume']
df.columns = [x for x in keys]
于 2013-03-19T00:28:05.867 回答
0

easier method is using the drag and drop solution called pytrader, check it out on github.

于 2021-06-15T14:12:27.683 回答