⏱️ 时间戳标准化

高频数据清洗 · 特征工程
📌 3、时间戳标准化: 不同交易所时间戳格式解析(Unix毫秒、纳秒、字符串)、时区处理、对齐到统一时间轴。
交易所 原始格式 示例 精度 时区
Binance Unix毫秒 int64 1654024199000 毫秒 UTC+0
Coinbase Pro ISO 8601 字符串 2022-06-01T12:00:00.123456Z 微秒/纳秒 UTC
Kraken Unix 纳秒 (含小数) 1.654024199e12 纳秒 UTC+0
上期所 (SHFE) 字符串 "yyyyMMdd HH:mm:ss.SSS" 20220601 15:30:00.000 毫秒 Asia/Shanghai
CME (GLOBEX) Unix 纳秒 int64 1654024199123456789 纳秒 America/Chicago
📥 原始时间戳 毫秒/纳秒/字符串 🔍 解析引擎 Unix → datetime 时区转换 (UTC) 精度提升至纳秒 📊 统一时间轴 UTC+0 · 纳秒精度 对齐到100ms栅格 🌍 pytz / zoneinfo ⏳ 标准化
# ===== 高频数据时间戳标准化 (Python) =====
import pandas as pd
import numpy as np
import pytz

# 1. 解析 Unix 毫秒 (Binance)
df_binance = pd.DataFrame({'timestamp_ms': [1654024199000, 1654024200123]})
df_binance['datetime_utc'] = pd.to_datetime(df_binance['timestamp_ms'], unit='ms', utc=True)

# 2. 解析 ISO 8601 字符串 (Coinbase)
df_coinbase = pd.DataFrame({'time_str': ['2022-06-01T12:00:00.123456Z']})
df_coinbase['datetime_utc'] = pd.to_datetime(df_coinbase['time_str'], utc=True)

# 3. 纳秒时间戳 (CME / Kraken 含小数)
df_nano = pd.DataFrame({'timestamp_ns': [1654024199123456789, 1654024200987654321]})
df_nano['datetime_utc'] = pd.to_datetime(df_nano['timestamp_ns'], unit='ns', utc=True)

# 4. 时区处理: 上海交易所字符串 → UTC
shanghai_tz = pytz.timezone('Asia/Shanghai')
df_shfe = pd.DataFrame({'local_str': ['20220601 15:30:00.000']})
df_shfe['datetime_shanghai'] = pd.to_datetime(df_shfe['local_str'], format='%Y%m%d %H:%M:%S.%f')
df_shfe['datetime_utc'] = df_shfe['datetime_shanghai'].dt.tz_localize(shanghai_tz).dt.tz_convert(pytz.UTC)

# 5. 对齐到统一时间轴 (100ms 重采样)
# 假设 df_all 已合并所有标准化时间戳,并设为索引
df_all = pd.concat([df_binance.set_index('datetime_utc'),
                    df_coinbase.set_index('datetime_utc')], axis=0)
df_aligned = df_all.resample('100L').nearest()   # 100毫秒对齐
print(df_aligned.head())