Python Pandas 相当于 JavaScript 中的

2022-08-30 04:27:14

通过以下 CSV 示例:

   Source,col1,col2,col3
   foo,1,2,3
   bar,3,4,5

我使用Pandas的标准方法是这样的:

  1. 解析 CSV

  2. 选择数据框中的列( 和col1col3)

  3. 处理列(例如,对 和 的值进行调整)col1col3)

有没有一个JavaScript库可以像Pandas一样做到这一点?


答案 1

这个wiki将总结和比较许多类似Javascript的库。pandas

一般来说,你应该看看Javascript库。 对于在Javascript中处理数据非常有用的“瑞士军刀”,就像对Python有帮助一样。您可能会看到经常使用,例如 ,即使不完全是 DataFrame/Pandas 的替换(即 没有相同的 API; 没有 / 具有与行为匹配的方法的类)d3d3pandasd3pandasd3d3d3SeriesDataFramepandas

Ahmed的回答解释了如何使用d3来实现一些DataFrame功能,下面的一些库受到LearnJsData等东西的启发,它使用和。d3lodash

至于DataFrame风格的数据转换(拆分,联接,分组等),这里有一些Javascript库的快速列表。

请注意,有些库是 Node.js 又名 Server-side Javascript,有些是浏览器兼容的,也就是客户端 Javascript,有些是 Typescript。因此,请使用适合您的选项。

  • danfo-jsbrowser-support and NodeJS-support))
    • 来自维格内什的回答
    • 丹佛(通常被导入并别名为);具有基本的数据帧类型数据结构,具有直接绘图的能力dfd
    • Tensorflow 的团队构建:“丹佛的主要目标之一.js是将数据处理、机器学习和 AI 工具带给 JavaScript 开发人员。...像Numpy和Pandas这样的开源库...”
    • pandas构建在 ;同样是建立在numpydanfo-jstensorflow-js
  • pandas-js
    • 更新pandas-js repo 已经有一段时间没有更新了
    • 来自STEELFeras的答案
    • “pandas.js是一个模仿Python pandas库的开源(实验)库。它依赖于Immutable.js作为NumPy逻辑等价物。pandas中的主要数据对象.js就像Python pandas,Series和DataFrame一样。
  • dataframe-js
    • “DataFrame-js为javascript和datascience提供了一个不可变的数据结构,即DataFrame,它允许使用sql和函数式编程启发的API来处理行和列。
  • 数据伪造
  • jsdataframe
    • “Jsdataframe是一个JavaScript数据整理库,灵感来自R和Python Pandas中的数据帧功能。
  • 数据帧
    • “通过分组和减少来探索数据。
  • SQL 框架
    • “数据帧在浏览器中满足 SQL”
    • “SQL Frames是一个低代码数据管理框架,可以直接嵌入到浏览器中,以提供丰富的数据可视化和用户体验。凭借其强大的内置分析引擎,数据源可以采用任何形状,形式和频率,并且可以直接在浏览器中进行分析。它允许通过将组合的DataFrame逻辑转译为SQL来扩展到大数据后端。

然后,在遇到这个问题,检查这里的其他答案并进行更多搜索之后,我发现了以下选项:

  • JS 中的 Apache Arrow
    • 感谢用户Back2Basics的建议:
    • “Apache Arrow是一个列式内存布局规范,用于编码平面和嵌套数据的向量和类似表格的容器。Apache Arrow是大型内存中列数据(Spark,Pandas,Drill,Graphistry等)的新兴标准。
  • 极性
  • 观察
    • 乍一看,似乎是IPython / Jupyter“笔记本”的替代品JS
    • Observable的页面承诺:“反应式编程”,一个“社区”,在“Web平台”上
    • 在此处查看 5 分钟介绍
  • 传送门.js(以前;来自鲁弗斯的答案)recline)
    • 可能已过时:不使用“数据帧”API
    • 可能已过时:相反,它强调它的“Multiview”(UI)API(类似于jQuery / DOM模型),它不需要jQuery,但确实需要浏览器!更多示例
    • 可能已过时:还强调了其MVC式架构;包括后端内容(即数据库连接)
  • js-data
    • 真的更像是一个ORM!它的大多数模块对应于不同的数据存储问题(,,),排序,过滤等。js-data-mongodbjs-data-redisjs-data-cloud-datastore
    • 在正侧确实在Node上工作.js作为第一优先级;“适用于 Node.js 和浏览器中。
  • 味噌鲁弗斯的另一个建议))
  • AlaSQL
    • “AlaSQL”是一个用于Javascript的开源SQL数据库,非常注重关系数据和无模式数据的查询速度和数据源灵活性。它适用于您的浏览器,Node.js和Cordova。
  • 一些思想实验:

以下是我们过去考虑上述选择的标准

  • 一般标准
    • 语言(NodeJS vs browser JS vs Typescript)
    • 依赖关系(即,如果它使用底层库/AJAX/远程API)
    • 积极支持(活动用户群、活动源存储库等)
    • JS 库的大小/速度
  • 熊猫在R比较中的标准
    • 性能
    • 功能/灵活性
    • 易用性
  • 与熊猫/数据帧API的相似性
    • 特别点击其主要功能
    • 强调数据科学
    • 内置可视化功能
    • 与其他工具(如(交互式笔记本)等)结合使用的演示集成Jupyter

答案 2

我一直在为JavaScript开发一个名为data-forge的数据争论库。它的灵感来自LINQ和Pandas。

它可以像这样安装:

npm install --save data-forge

您的示例将如下所示:

var csvData = "Source,col1,col2,col3\n" +
    "foo,1,2,3\n" +
    "bar,3,4,5\n";

var dataForge = require('data-forge');
var dataFrame = 
    dataForge.fromCSV(csvData)
        .parseInts([ "col1", "col2", "col3" ])
        ;

如果您的数据位于 CSV 文件中,您可以按如下方式加载它:

var dataFrame = dataForge.readFileSync(fileName)
    .parseCSV()
    .parseInts([ "col1", "col2", "col3" ])
    ;

可以使用该方法转换行。select

您可以使用该方法提取列,然后使用该方法转换该列中的值。getSeriesselect

您可以像这样将数据从数据框中取回:

var data = dataFrame.toArray();

对列求平均值:

 var avg = dataFrame.getSeries("col1").average();

你可以用它做更多的事情。

您可以在 npm 上找到更多文档。