1.引入
时间是pandas数据的主要索引。中文网站上下载的数据含有中文日期,其中包含年月日。如下图所示:
沪深300指数的数据含有中文,需要处理成python的 datetime格式才能放入回测框架中. 方法有很多,关键如何优雅的使用pythonic的完成转换,需要考虑。
2.正则表达式提取年月日信息+map函数
用正则表达式提取年月日信息,然后改写成英文格式
def date_transder(my_str ):
pattern = pile('(\d+)\D(\d+)\D(\d+)')
dd = pattern.findall(my_str)
date_strr = dd[0][2]+'/'+dd[0][1]+'/'+dd[0][0]
return date_strr
使用map function对索引数据里面的中文日期一一处理。
假设数据块存放在dataframe df 中。 df.index.values极为需要转换的日期。使用map函数实现数据间的映射。
dates = list(df.index.values)
dates = list(map(date_transder, dates))
3.完整代码
import re
import pandas as pd
import os
def date_transder(my_str ):
pattern = pile('(\d+)\D(\d+)\D(\d+)')
dd = pattern.findall(my_str)
date_strr = dd[0][2]+'/'+dd[0][1]+'/'+dd[0][0]
return date_strr
path1 = os.path.abspath('.')
csv_dir = 'data_csv'
csv_dir = os.path.join(path1, csv_dir)
s='hs300'
df = pd.read_csv(
os.path.join(csv_dir, '%s.csv' % s),
header=0, index_col=0
)
dates = list(df.index.values)
dates = list(map(date_transder, dates))
df = df.reset_index()
df['date'] = dates
df = df.set_index('date')
df = df.sort_index()
df.to_csv('hs300.csv')
4. 最终结果
重新索引排序过后的数据如下图。
沪深300index 数据下载地址: