Python Pandas与JavaScript相当

nev*_*int 61 javascript python pandas

使用此CSV示例:

   Source,col1,col2,col3
   foo,1,2,3
   bar,3,4,5
Run Code Online (Sandbox Code Playgroud)

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

  1. 解析CSV

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

  3. 处理列(例如,使用col1和的值 col3)

是否有像Pandas那样的JavaScript库?

The*_*Pea 76

所有答案都很好.希望我的答案是全面的(即尝试列出所有选项).我希望以任何标准返回并修改这个答案,以帮助做出选择.

我希望有人来这里熟悉d3.我认为它本身是不可或缺的,无论是寻找DataFrame/Pandas的替代品.Ahmed的答案解释了如何使用d3 来实现一些DataFrame功能,下面的一些库的灵感来自于使用和的LearnJsData之类的东西.d3pandas

至于dataframe-ish,我对选择感到不知所措.以下是您可能遇到的一些选项的快速列表.我还没有详细检查过它们(我发现组合Google + NPM搜索的最多).

小心你使用可以使用的各种; 一些是Node.js又名服务器端Javascript,一些是浏览器兼容的,也就是客户端Javascript.有些是打字稿.

  • 数据帧的js
    • "DataFrame-js为javascript和datascience提供了一个不可变的数据结构,DataFrame,它允许使用sql和函数式编程激活api来处理行和列."
  • 数据伪造
  • jsdataframe
    • "Jsdataframe是一个JavaScript数据争用库,受到R和Python Pandas中数据框功能的启发."
  • 数据帧
    • "通过分组和减少来探索数据."

然后在回答这个问题,在这里查看其他答案并进行更多搜索后,我找到了以下选项:

  • JS中的Apache Arrow
    • 感谢用户Back2Basics的建议:
    • "Apache Arrow是一种柱状内存布局规范,用于编码平面和嵌套数据的向量和类似容器.Apache Arrow是大型内存中柱状数据(Spark,Pandas,Drill,Graphistry,...)的新兴标准"
  • 可观察
    • 乍一看,似乎d3是IPython/Jupyter "笔记本"的替代品
    • Observable的页面承诺:"反应式编程",一个"社区",在"Web平台"上
    • 在这里看5分钟的介绍
  • 斜倚(来自Rufus的回答)
    • 我期望强调DataFrame的API,Pandas本身会尝试这样做 从R保留 记录每个R功能的替换/改进/对应.
    • 相反,我发现重点斜倚的例子强调 将数据导入DOM的jQuery方法它(很棒)Multiview(UI),它不需要jQuery但需要浏览器!更多例子
    • ......或强调其MVC-ish架构 ; 包括后端内容(即数据库连接)
    • 我可能太苛刻了; 毕竟,关于熊猫的一个好处是如何轻松创建可视化; 盒子外面.
  • JS-数据
    • 真的更像是一个ORM!大多数的它的模块对应于不同的数据存储问题(pandas,d3,d3),排序,过滤等
    • 在加号方面确实将Node.js作为第一优先级; "在Node.js和浏览器中运行."
  • 味噌(Rufus的另一个建议)
  • AlaSQL
    • "AlaSQL"是一个用于Javascript的开源SQL数据库,主要关注关系数据和无模式数据的查询速度和数据源灵活性.它适用于您的浏览器,Node.js和Cordova."
  • 一些思想实验:

我希望这篇文章可以成为一个社区维基,并评估(即比较上面的不同选项)与不同的标准,如:

  • 熊猫在R比较中的标准
    • 性能
    • 功能/灵活性
    • 便于使用
  • 我自己的建议
    • 与Pandas/Dataframe API相似
    • 具体点击其主要功能
    • 数据科学重点> UI重点
    • 与其他工具d3 (交互式笔记本)等结合使用进行演示

JS库可能永远不会做的一些事情(但它可以吗?)

  • 有这么多选择的事实令人讨厌。而是让社区只专注于一件事并让它变得更好。 (2认同)
  • (这里是箭头JS作者)@ClaudiuCreanga我理解这种挫败感。最初,我们编写ArrowJS的目的是弥合节点/浏览器与更传统的大数据堆栈之间的鸿沟,到目前为止,我们已经在出色的IPC /流原始数据上投入了最大的精力。下一步,我们很乐意开始与更多JS库(tensorflow,d3等)集成,并且始终欢迎PR。另一种方法是[JPMC的Perspective](https://github.com/finos/perspective/)项目,该项目使用ArrowJS消费和产生Arrow表。 (2认同)
  • [polars](https://github.com/pola-rs/polars) 在 Node.js 中可用,它可能是 Nodejs 中性能最高、功能最齐全的选项。 (2认同)
  • 不错的清单。这是 [npmtrends](https://npmtrends.com/danfojs-vs-data-forge-vs-dataframe-vs-dataframe-js-vs-js-data-vs-jsdataframe-vs-pandas-js-vs- pyodide)适用于任何努力选择或缩小选择范围的人。 (2认同)

Ahm*_*sih 8

Ceaveat以下仅适用于d3 v3,不适用于最新的d4v4!

我偏爱d3.js,虽然它不会完全替代 Pandas,但如果你花一些时间学习它的范式,它应该能够为你处理所有的数据争吵。(如果你最终想要在浏览器中显示结果,它非常适合。)

例子。我的 CSV 文件data.csv

name,age,color
Mickey,65,black
Donald,58,white
Pluto,64,orange
Run Code Online (Sandbox Code Playgroud)

在同一目录中,创建一个index.html包含以下内容:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>My D3 demo</title>

    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
  </head>
  <body>

      <script charset="utf-8" src="demo.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

以及一个demo.js包含以下内容的文件:

name,age,color
Mickey,65,black
Donald,58,white
Pluto,64,orange
Run Code Online (Sandbox Code Playgroud)

在目录中,运行python -m SimpleHTTPServer 8181并在浏览器中打开http://localhost:8181以查看年龄及其平均值的简单列表。

这个简单的例子展示了 d3 的一些相关特性:

  • 对摄取在线数据(CSV、TSV、JSON 等)的出色支持
  • 数据争吵的智慧诞生
  • 数据驱动的 DOM 操作(可能是最难理解的事情):您的数据被转换为 DOM 元素。

  • 只是为了帮助未来的新手 - 以上说明不再适用于 d3 v4。认为映射阶段现在在数据回调中完成,例如 https://github.com/d3/d3-dsv/blob/master/README.md#csvParseRows (2认同)

Ash*_*vis 8

我一直在研究JavaScript的数据处理库,称为数据伪造。它受到LINQ和Pandas的启发。

可以这样安装:

npm install --save data-forge
Run Code Online (Sandbox Code Playgroud)

您的示例将如下所示:

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" ])
        ;
Run Code Online (Sandbox Code Playgroud)

如果您的数据位于CSV文件中,则可以这样加载:

var dataFrame = dataForge.readFileSync(fileName)
    .parseCSV()
    .parseInts([ "col1", "col2", "col3" ])
    ;
Run Code Online (Sandbox Code Playgroud)

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

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

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

var data = dataFrame.toArray();
Run Code Online (Sandbox Code Playgroud)

平均一列:

 var avg = dataFrame.getSeries("col1").average();
Run Code Online (Sandbox Code Playgroud)

您可以做更多的事情。

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


STE*_*EEL 6

下面是 Python numpy 和 pandas

``

import numpy as np
import pandas as pd

data_frame = pd.DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], [1, 2, 3, 4])

data_frame[5] = np.random.randint(1, 50, 5)

print(data_frame.loc[['C', 'D'], [2, 3]])

# axis 1 = Y | 0 = X
data_frame.drop(5, axis=1, inplace=True)

print(data_frame)
Run Code Online (Sandbox Code Playgroud)

``

同样可以在 JavaScript* 中实现 [ numjs 仅适用于 Node.js ] 但 D3.js 具有许多高级数据文件集选项。numjs 和 Pandas-js 仍在工作中。

import numpy as np
import pandas as pd

data_frame = pd.DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], [1, 2, 3, 4])

data_frame[5] = np.random.randint(1, 50, 5)

print(data_frame.loc[['C', 'D'], [2, 3]])

# axis 1 = Y | 0 = X
data_frame.drop(5, axis=1, inplace=True)

print(data_frame)
Run Code Online (Sandbox Code Playgroud)


Fer*_*ras 6

Pandas.js 目前是一个实验性的库,但它看起来很有前途,它在 immutable.js 和 NumpPy 逻辑下使用,数据对象系列和 DataFrame 都在那里。

2021 年 2 月 10 日更新,@jarthur 提到过去 4 年似乎没有更新此存储库

  • 看起来该库已经两年多没有提交了,而且似乎有很多问题。我不会说“非常有希望”。 (4认同)

Vig*_*ati 6

@neversaint 你的等待结束了。欢迎来到Danfo.js,它是像基于 tensorflow.js 构建的 Javascript 库的熊猫,并支持开箱即用的张量。这意味着您可以将 danfo 数据结构转换为张量。并且可以进行groupby、合并、join、绘图等数据处理。