Skip to main content
 首页 » 编程设计

python之使用 Pandas 库将历史 Metatrader CSV 数据导入 Python(日期/时间解析)

2025年05月04日8mate10pro

我有一些 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 引用处理日期后的列索引。因此,建议使用列名,因为它使您不必考虑处理前和处理后的列索引。