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

2024-04-26 21:17:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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函数。。。在

所以我这样做了:

^{pr2}$

我想现在有日期/时间解析。。。在

所以我改变了

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个“datetime”列。在


Tags: 文件csv数据函数nonepandasdfread
3条回答
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]

parse_dates不接受索引值。在

尝试类似于:

pd.read_csv('data/EURUSD15.csv',  parse_dates = [['YYYY.MM.DD', 'HH:MM']], index_col = 0, 
        date_parser=parse)

列是零索引的,因此需要执行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表示日期后处理的列索引。因此,建议使用列名,因为它允许您不必考虑处理前和处理后的列索引。在

相关问题 更多 >