📌 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 |
- 🌐 时区统一 · 全部转为 UTC+0 (或交易所本地时区 → UTC)
- ⚡ 精度提升 · 毫秒/纳秒统一为纳秒时间轴 (int64)
- 🧩 字符串解析 · ISO 8601 / 自定义格式 → pandas Datetime
- 📏 对齐策略 · 最近邻插值、重采样至固定频率 (如 100ms)
- 🔄 时区感知 · 使用 pytz / zoneinfo 处理夏令时
import pandas as pd
import numpy as np
import pytz
df_binance = pd.DataFrame({'timestamp_ms': [1654024199000, 1654024200123]})
df_binance['datetime_utc'] = pd.to_datetime(df_binance['timestamp_ms'], unit='ms', utc=True)
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)
df_nano = pd.DataFrame({'timestamp_ns': [1654024199123456789, 1654024200987654321]})
df_nano['datetime_utc'] = pd.to_datetime(df_nano['timestamp_ns'], unit='ns', utc=True)
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)
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()
print(df_aligned.head())