我有一些 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 的文件
我想使用 Pandas 库和 read_csv 函数用 Python 导入这个文件...
所以我这样做了:
#!/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 个“日期时间”列。
请您参考如下方法:
列的索引为零,因此您需要执行 parse_dates=[[0,1]]
这是最新版本的 Pandas ,但应该适用于 0.8.0+:
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 引用处理日期后的列索引。因此,建议使用列名,因为它使您不必考虑处理前和处理后的列索引。
