【问题标题】:Is there an equivalent of R’s data.table fread cmd keyword in pandas?pandas 中是否有相当于 R 的 data.table fread cmd 关键字?
【发布时间】:2020-08-25 11:11:55
【问题描述】:

R 的 data.table 读取主力“fread”的一个非常有用的方面是“cmd”关键字,使用它可以以编程方式构建 shell 命令并将其传递给 fread,以将 shell 命令的输出作为数据读取。桌子。

这对于交互式使用来说非常强大,因为命令可以是任何字符串,例如一个 ssh ,它将在远程主机上运行,​​并且可以将基本解析推迟到一个简单的 grep/sec/awk 全部在一行中,同时避免需要制作临时目录和文件并采取额外的步骤来获取远程文件。

据我所知,查看最新的 pandas 文档,在任何 pd.read_* 方法中似乎都没有等效项。不是特色吗?是否有一个简单的等价物代替人们使用?

【问题讨论】:

  • 这个blog post 解释了如何将 subprocess 模块与 pandas 结合起来。 Pandas 没有用于读取 shell 输出的内置模块。另一种选择是使用 ipython 并将您的操作结果传递给 pandas。 pydatatable 旨在复制 R 的数据表,提供命令选项。
  • @sammywemmy 太棒了,我刚刚尝试过,似乎我可以通过 import datatable as dt 后跟 dt.fread(cmd=...).to_pandas() 来获得类似的简洁性。博客文章的替代方案是也是一个不错的选择,但必须创建子进程更冗长,并且在大帧上可能会更慢。
  • 如果您找到了您发布的问题的解决方案,请随时自行回答,因为可能有其他人正在研究相同的功能。

标签: python r pandas data.table fread


【解决方案1】:

正如@sammywemmy 指出的,有两种选择。第一个,比 R 等价的更详细一点是像这样使用subprocess

import pandas as pd, import subprocess
with subprocess.Popen("shell_cmd", shell=True, stdout=subprocess.PIPE) as p:
    df = pd.read_csv(p.stdout)

一个更高效、更简洁的替代方法是使用datatable 包并执行以下操作:

import datatable as dt
df = dt.fread(cmd="shell_cmd").to_pandas()

您还可以选择使用 datatable 框架类型在本机工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多