如何将CSV日期时间自动转换为UNIX时间戳适配回测代码
修改方案
你的核心需求是将CSV中YYYY-MM-DD HH:MM:SS格式的时间字符串转换为毫秒级UNIX时间戳(如1512045180000),同时保留原代码的时间范围筛选逻辑。以下是具体修改:
修改后的完整代码
from datetime import datetime from dateutil.parser import parse import os import pandas as pd def getEthereumData(start_date, end_date): print("Start reading ethereum data..") path = os.path.dirname(os.path.abspath(__file__)) data = pd.read_csv(path + "\\data\\BTCUSDT-1m-data.csv") # 关键修改:将字符串时间转换为毫秒级UNIX时间戳 # 1. 把CSV中的时间字符串解析为datetime对象 data['DateTime'] = pd.to_datetime(data['Timestamp'], format='%Y-%m-%d %H:%M:%S') # 2. 将datetime对象转换为毫秒级UNIX时间戳(pandas的datetime转int64是纳秒,除以1e6得到毫秒) data['Timestamp'] = data['DateTime'].astype('int64') // 10**6 data = data.set_index('DateTime') data = data.dropna() data = data[parse(start_date): parse(end_date)] print("Reading complete") return data
关键修改说明
- 时间字符串转datetime:使用
pd.to_datetime()并指定格式%Y-%m-%d %H:%M:%S,确保快速且准确解析CSV中的时间字符串(如果CSV时间格式有变动,只需调整format参数)。 - datetime转毫秒级时间戳:pandas的datetime对象转为
int64类型时得到的是纳秒数,除以10**6即可转换为毫秒级时间戳,符合你需要的格式。 - 保留原逻辑:后续的索引设置、空值处理、时间范围筛选逻辑均保留,保证回测代码的原有流程不受影响。
注意事项
如果CSV中存储时间的列名不是Timestamp,请将代码中的data['Timestamp']替换为实际列名(比如data['Time']或data['Date'])。
内容的提问来源于stack exchange,提问作者MOUSA HAZZAZI
相关产品推荐
相关产品推荐

