如何高效地将多币种时序数据按交易对分别追加保存为独立CSV文件
技术百科
花韻仙語
发布时间:2026-01-24
浏览: 次 本文介绍使用pandas按`sym`列分组,将包含多个交易对(如ethusdt、idusdt)的ohlcv时序数据批量追加写入对应命名的csv文件,兼顾性能与可维护性。
在实时行情数据采集场景中(例如从Binance流式获取OHLCV),原始DataFrame常混杂多个交易对(sym)的数据,且时间戳(索引)高度离散。目标是将每个交易对的数据独立、持续、高效地追加保存到专属CSV文件(如ETHUSDT.csv、IDUSDT.csv),而非一次性全量导出或低效逐行遍历。
✅ 正确做法:按 sym 分组 + 批量追加写入
最核心的原则是:避免对单行循环调用 to_csv(如 for coin in df.sym:),这会导致大量I/O开销和重复文件打开/关闭。应先按交易对聚合数据块,再统一追加写入:
# 假设 df 是当前批次新获取的 OHLCV 数据(含 'sym', 'o', 'h', 'l', 'c', 'v', 'barcomplete' 等列)
for symbol, group in df.groupby('sym'):
filename = f"{symbol}.csv"
# mode='a' 表示追加;header=False 避免重复写入列名(仅首次需 header=True)
group.to_csv(filename, mode='a', header=not os.path.exists(filename), index=True)? 关键细节说明:groupby('sym') 按交易对精准切分数据,每组 group 是一个完整子DataFrame(含所有列和时间索引);header=not os.path.exists(filename) 确保首次创建文件时写入表头,后续追加时不重复写(比固定 header=False 更健壮);index=True 保留时间戳索引(即原始datetime),这是时序分析的关键;使用 rf"{symbol}.csv"(或 f"{symbol}.csv")直接拼接文件名,简洁安全。
⚠️ 常见误区与优化建议
-
❌ 错误示例(低效且逻辑错误):
for coin in df.sym: # 遍历的是单个值,非分组!且重复打开同一文件多次 df['sym'].to_csv(f"{coin}.csv", mode='a', header=False) # 只写了 'sym' 列,丢弃全部OHLCV数据!此写法不仅性能差,更会丢失o/h/l/c/v等核心字段,仅保存符号列。
-
✅ 流式处理推荐模式(内存友好):
若数据持续流入(如每秒一批),建议累积若干批次后再分组写入,减少磁盘IO频率:# 初始化空列表存储批次 batch_dfs = [] # 在数据获取循环中(例如 while True:) # new_df = fetch_binance_data() # 获取新一批数据 batch_dfs.append(new_df) # 每满 N 条或每 T 秒触发一次落盘 if len(bat
ch_dfs) >= 100: combined = pd.concat(batch_dfs, ignore_index=False) # 保持原时间索引 for symbol, group in combined.groupby('sym'): group.to_csv(f"{symbol}.csv", mode='a', header=not os.path.exists(f"{symbol}.csv"), index=True) batch_dfs.clear() # 清空已处理批次
? 总结
- 核心方法:df.groupby('sym').apply(...) 或显式循环 for symbol, group in df.groupby('sym');
- 性能关键:批量分组写入 > 单行循环写入;合理缓冲批次降低IO压力;
- 健壮性要点:动态控制 header 参数、保留 index、校验文件路径合法性(建议添加 os.path.abspath() 或目录预创建);
- 进阶提示:生产环境可考虑切换至Parquet(列存+压缩)或数据库(如SQLite)提升读写效率与查询能力。
通过以上方式,你既能准确分离多币种数据流,又能保证追加写入的效率与可靠性,为后续的量化分析打下坚实基础。
# 的是
# 是一个
# 这是
# 多个
# 则是
# 进阶
# 首次
# app
# 币种
# 循环
# 数据库
# 遍历
# 流式
# for
# csv
# 切分
# pandas
# symbol
# sqlite
# 币
# csv文件
# usdt
# binance
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么设置组合键快捷方式_Windows1
- MySQL 中使用 IF 和 CASE 实现查询字
- Win11任务栏怎么调到左边_Win11开始菜单居
- win11如何清理传递优化文件 Win11为C盘瘦
- 如何解决Windows时间不准的问题?(自动同步设
- Win11关机快捷键是什么_Win11快速关机方法
- Win11怎样彻底卸载自带应用_Win11彻底卸载
- 如何使用Golang recover捕获panic
- php中::能访问全局变量吗_全局作用域与类作用域
- Win11怎么关闭边缘滑动手势_Windows11
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- 如何使用Golang实现文件追加操作_向已有文件追
- Mac如何整理桌面文件_Mac使用堆栈功能一键整理
- Win11怎么忘记WiFi网络_Win11删除已保
- Win10怎样清理C盘浏览器缓存_Win10清理浏
- Win10怎样卸载DockerDesktop_Wi
- 如何在Golang中捕获结构体方法错误_Golan
- Win11怎么设置任务栏对齐方式_Windows1
- Win10怎样清理C盘爱奇艺缓存_Win10清理爱
- Python日志系统设计与实现_高可观测性架构实战
- c++中如何对数组进行排序_c++数组排序算法汇总
- 如何诊断并终止卡死的 multiprocessin
- Go语言中CookieJar的持久化机制解析:内存
- Win11怎么设置单手模式_Win11触控键盘布局
- Ajax提交表单PHP怎么接收_处理Ajax发送的
- Go 语言标准库为何不提供泛型切片的 Contai
- XAMPP 启动失败(Apache 突然停止)的终
- 如何在 Go 中判断变量是否为函数类型
- c# Task.Yield 的作用是什么 它和Ta
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Win11怎么设置系统还原_Windows11系统
- Mac怎么进行语音输入_Mac听写功能设置与使用【
- Mac系统更新下载慢或失败怎么办_解决macOS升
- XML的“混合内容”是什么 怎么用DTD或XSD定
- Mac的“预览”如何合并多个PDF_Mac文件处理
- 如何使用 Selenium 正确获取篮球参考网站球
- Go 中实现 Python urllib.quot
- 如何使用Golang开发基础文件下载功能_Gola
- Win10怎么更改用户名 Win10修改账户名称操
- php订单日志怎么记录物流_php记录订单物流变更
- Windows10任务栏图标变成白色文件_Win1
- LINUX怎么进行文本内容搜索_Linux gre
- 如何在JavaScript中动态拼接PHP的bas
- c++ namespace命名空间用法_c++避免
- Win11怎么查看激活状态_查询Windows 1
- Win11怎么调整屏幕亮度_Windows 11调
- Windows10系统怎么查看显卡驱动_Win10
- Win11怎么清理C盘下载文件夹_Win11清理下
- C#如何在一个XML文件中查找并替换文本内容
- LINUX如何删除用户和用户组_Linux use


QQ客服