danfojs
Danfo.js 是一款专为 JavaScript 环境打造的高性能开源数据分析库,旨在让开发者在浏览器或 Node.js 中也能轻松处理结构化数据。它深受 Python 领域著名的 Pandas 库启发,提供了相似的 API 设计,使得熟悉 Pandas 的用户能够零门槛上手,有效解决了前端生态中长期缺乏成熟、灵活数据操作工具的痛点。
无论是数据清洗、缺失值处理,还是复杂的数据聚合与转换,Danfo.js 都能通过直观的 DataFrame 和 Series 数据结构高效完成。其独特亮点在于原生支持 TensorFlow.js,允许用户将数据对象无缝转换为张量(Tensor),极大地便利了前端机器学习模型的训练与推理。此外,它还内置了强大的分组操作、智能数据对齐、时间序列处理以及丰富的数据预处理功能(如独热编码、标准化等),并支持直接读取 CSV、Excel 等文件及交互式绘图。
这款工具特别适合前端工程师、全栈开发者以及希望在 JavaScript 环境中进行数据科学探索的研究人员使用。如果你需要在 Web 端构建数据密集型应用或原型,Danfo.js 将是一个得力助手,让你无需依赖后端即可实现完整的数据分析流程。
使用场景
某前端数据分析师需要在浏览器端直接处理并可视化一份包含缺失值和类别特征的百万级电商用户行为 CSV 日志,以便实时生成洞察报告。
没有 danfojs 时
- 开发者必须手动编写复杂的嵌套循环来解析 CSV 字符串,代码冗长且极易出错。
- 处理缺失数据(如空字段)需要逐个遍历数组进行判断和填充,逻辑分散难以维护。
- 对类别数据进行机器学习预处理(如 OneHot 编码)需从零实现算法,耗时且性能低下。
- 无法直接将清洗后的数据转换为 Tensorflow.js 张量格式,导致前后端模型对接困难。
- 缺乏原生的分组聚合(groupby)功能,统计各渠道转化率时需要大量临时变量辅助计算。
使用 danfojs 后
- 调用
readCSV即可一键加载数据为 DataFrame 对象,自动识别表头与数据类型,瞬间完成结构化。 - 利用内置的
dropNa或fillNa方法,一行代码即可优雅地处理全表缺失值,无需关心底层索引。 - 直接调用
oneHotEncoder和standardScaler接口,快速完成特征工程,无缝准备模型输入。 - 通过
tensor属性将处理好的数据帧直接转为 Tensorflow.js 张量,实现浏览器端推理零摩擦对接。 - 使用链式调用的
groupBy和agg方法,直观地完成多维度数据透视与聚合分析,逻辑清晰易读。
danfojs 将繁琐的底层数据操作封装为直观的 API,让 JavaScript 开发者能在浏览器中享受如同 Python Pandas 般高效流畅的数据分析体验。
运行环境要求
- Linux
- macOS
- Windows
未说明 (支持 Tensorflow.js,可在 CPU 或 GPU 上运行,具体取决于底层 TF.js 配置)
未说明

快速开始

Danfojs:功能强大的 JavaScript 数据分析工具包
它是什么?
Danfo.js 是一个 JavaScript 库,提供了快速、灵活且表达力强的数据结构,旨在让处理“关系型”或“带标签”数据既简单又直观。它深受 Pandas 库的启发,并提供了类似的 API。这意味着熟悉 Pandas 的用户可以轻松上手 danfo.js。
主要特性
- Danfo.js 速度快,并且开箱即支持 Tensorflow.js 张量。这意味着您可以将 Danfo 数据结构转换为张量。
- 轻松处理浮点数和非浮点数数据中的缺失值(用
NaN表示)。 - 尺寸可变性:可以在 DataFrame 中插入/删除列。
- 自动和显式对齐:对象可以显式地对齐到一组标签,或者用户也可以忽略标签,让
Series、DataFrame等在计算中自动为您对齐数据。 - 强大而灵活的分组功能,可用于对数据集执行拆分-应用-合并操作,以实现数据的聚合和转换。
- 能够轻松地将数组、JSON、列表或对象、张量以及不同索引的数据结构转换为 DataFrame 对象。
- 针对大型数据集的智能基于标签的切片、高级索引和查询。
- 直观的合并和连接数据集。
- 强大的 IO 工具,用于从平面文件(CSV、Json、Excel)加载数据。
- 功能强大、灵活且直观的 API,用于交互式绘制 DataFrame 和 Series。
- 针对时间序列的特定功能:日期范围生成以及日期和时间属性。
- 支持 DataFrame 和 Series 上的稳健数据预处理函数,如 OneHotEncoders、LabelEncoders,以及像 StandardScaler 和 MinMaxScaler 这样的缩放器。
安装
您可以通过三种方式在您的应用程序中安装和使用 Danfo.js:
- 对于 Node.js 应用程序,您可以通过 yarn 和/或 npm 等包管理器安装danfojs-node 版本:
npm install danfojs-node
或
yarn add danfojs-node
对于使用 React、Vue、Next.js 等框架构建的客户端应用程序,您可以安装danfojs 版本:
npm install danfojs
或
yarn add danfojs
如果您想直接在 HTML 文件中使用,可以从 JsDelivr 添加最新的脚本标签到您的 HTML 文件中:
<script src="https://cdn.jsdelivr.net/npm/danfojs@1.1.2/lib/bundle.js"></script>
所有可用版本请参见这里。
快速示例
- CodePen 上的 Danfojs 与 HTML 和原生 JavaScript
- Code Sandbox 上的 Danfojs 与 React
- ObservableHq 上的 Danfojs
- Replit 上的 Danfojs 在 Node.js 中
浏览器中的使用示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://cdn.jsdelivr.net/npm/danfojs@1.1.2/lib/bundle.js"></script>
<title>文档</title>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<script>
dfd.readCSV("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
.then(df => {
df['AAPL.Open'].plot("div1").box() //绘制箱线图
df.plot("div2").table() //以表格形式显示 CSV
new_df = df.setIndex({ column: "Date", drop: true }); //将索引重置为 Date 列
new_df.head().print() //
new_df.plot("div3").line({
config: {
columns: ["AAPL.Open", "AAPL.High"]
}
}) //绘制时间序列图
}).catch(err => {
console.log(err);
})
</script>
</body>
</html>
浏览器中的输出:

Node.js 中的示例用法
const dfd = require("danfojs-node");
const file_url =
"https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv";
dfd
.readCSV(file_url)
.then((df) => {
// 打印前五行数据
df.head().print();
// 计算所有数值列的描述性统计信息
df.describe().print();
// 打印数据的形状
console.log(df.shape);
// 打印所有列名
console.log(df.columns);
// 打印每列推断出的数据类型
df.ctypes.print();
// 通过子集选择一列
df["Name"].print();
// 按列名删除列
let cols_2_remove = ["Age", "Pclass"];
let df_drop = df.drop({ columns: cols_2_remove, axis: 1 });
df_drop.print();
// 按数据类型选择列
let str_cols = df_drop.selectDtypes(["string"]);
let num_cols = df_drop.selectDtypes(["int32", "float32"]);
str_cols.print();
num_cols.print();
// 向 DataFrame 添加新列
let new_vals = df["Fare"].round(1);
df_drop.addColumn("fare_round", new_vals, { inplace: true });
df_drop.print();
df_drop["fare_round"].round(2).print(5);
// 打印该列中每个值出现的次数
df_drop["Survived"].valueCounts().print();
// 打印 DataFrame 的最后十行
df_drop.tail(10).print();
// 打印 DataFrame 中缺失值的数量
df_drop.isNa().sum().print();
})
.catch((err) => {
console.log(err);
});
Node 控制台输出:

笔记本支持
查看官方入门指南
文档
官方文档可以在这里找到。
讨论与开发
开发相关的讨论可以在这里进行。
贡献 Danfo
我们欢迎所有贡献,包括错误报告、修复、文档改进、功能增强和创意建议。有关如何贡献的详细说明,请参阅贡献指南。
许可证 MIT
版本历史
v1.2.02025/04/03v1.1.22022/10/12v1.1.12022/04/20v1.1.02022/04/04v1.0.52022/04/02v1.0.32022/03/08v1.0.22022/01/19v1.0.12022/01/16v1.0.02022/01/12v0.3.42021/12/05v0.3.32021/10/10v0.3.22021/10/02v0.3.12021/10/01v0.2.52021/05/30v0.2.42021/03/29v0.2.32021/03/06v0.2.2-browser2021/02/14v0.2.22021/02/14v0.1.3-node-beta2020/08/15v0.1.0-browser-beta2020/08/15常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
