【问题标题】:How can I import Pandas with Jython如何使用 Jython 导入 Pandas
【发布时间】:2016-03-25 04:16:22
【问题描述】:

我是 python 新手,我已经安装了 Jython2.7.0

Java

import org.python.util.PythonInterpreter;
import org.python.core.*; 

public class Main {
    public static void main(String[] args) {
         PythonInterpreter interp = new PythonInterpreter(); 
         interp.execfile("D:/Users/JY/Desktop/test/for_java_test.py");  
         interp.close();
    }
}

Python

import pandas as pd
import ctypes

def main():
    data = pd.read_csv('for_test.csv')
    data_mean = data.a*2
    data_mean.to_csv('catch_test.csv',index=False)
    ctypes.windll.user32.MessageBoxW(0, "Done. Output: a * 2", "Output csv", 0)

if __name__ == '__main__':
    main()

然后我得到了这个错误。

Exception in thread "main" Traceback (most recent call last):
File "D:\Users\JYJU\Desktop\test_java\for_java_test.py", line 1, in <module>
    import pandas as pd
ImportError: No module named pandas

如果我想使用 pandas,我该如何解决这个问题?

【问题讨论】:

  • 能否请您解释一下为什么使用 Jython 而不是 CPython?
  • 您能否提供有关您的设置的更多信息?你是如何安装 Jython 和 Pandas 的?更具体地说,您在哪里安装了 Pandas?
  • 因为我写了一个python代码来导入.cvs并用pandas处理数据。现在我的老板需要我把它交给在java环境下的用户,但我很少使用java。所以我选择jython连接。
  • 我安装了jython-installer-2.7.0.jarJRE 7,我在python 3.5上安装了pandas-0.17.1
  • 所以你安装了 Pandas for Python (CPython)。如果您使用pip install pandas,我猜pip 命令是来自CPython 的命令。在 Jython 的 bin 目录下,有一个 pip 脚本,如果你直接调用它,它会尝试为 Jython 安装模块。我尝试像这样安装 pandas 但失败了,这表明 Jython 无法导入 pandas。

标签: python pandas jython-2.7


【解决方案1】:

您目前无法将 Pandas 与 Jython 一起使用,因为它依赖于 CPython 特定的本机扩展。一个依赖项是 NumPy,另一个是 Cython(它实际上不是原生 CPython 扩展,但会生成这样的扩展)。

密切关注JyNI project(“Jython 本机接口”)。 它使 Jython 能够使用本机 CPython 扩展,其确切目的是解决您遇到的类似问题。 然而,它仍在大力开发中,还不能将 Pandas 或 NumPy 加载到 Jython 中,但是这两个框架都在优先级列表中。

(例如,ctypes 已经在某种程度上发挥了作用。)

此外,它目前仅支持 POSIX(在 Linux 和 OSX 上测试)。

如果您不需要专门的 Jython,而只是 一些 Java/Pandas 互操作,则一个已经可行的解决方案是嵌入 CPython 解释器。 JPYJEP 是提供此功能的项目。使用它们中的任何一个,您都应该能够互操作 Java 和 Pandas(或任何其他 CPython 特定框架)。

【讨论】:

    【解决方案2】:

    据我所知pandas 是用cython 编写的,是一个CPython 扩展。这意味着它旨在供 Python 语言的CPython 实现使用(这是大多数人使用的主要实现)。

    Jython 是一个 Python 实现,用于在 JVM 上运行 Python 程序,用于提供与 Java 库的集成,或为 Java 程序编写 Python 脚本等。

    作为 CPython 扩展(如 pandas)实现的 Python 模块不一定与所有 Python 实现兼容(CPython 以外的著名实现是 Jython、PyPyIronPython

    如果您确实必须同时使用 Jython 和 pandas,并且找不到其他解决问题的方法,那么我建议在不同的进程中使用它们。

    一个 Java 进程是您在 JVM 上运行的 Jython 应用程序(可以是调用 Jython 库的 Java 代码,或者是可能需要与某些 Java 库集成的 Python 代码),另一个 CPython 进程运行以提供 pandas 所需的操作。

    然后使用某种形式的 IPC(或工具)进行通信(标准 IO、套接字、OS 管道、共享内存、memcache、Redis 等)。

    Java进程向CPython发送请求(或将请求注册到共享存储),提供处理参数,CPython进程使用pandas计算结果并将结果的序列化形式发回(或将结果放回共享存储)存储)。

    这种方法需要额外的编码(由于将任务拆分为单独的进程),并且需要序列化请求/响应(这取决于应用程序及其尝试处理的数据)。

    例如在这个问题的示例代码中,Java 进程可以将 CSV 文件名提供给 CPython,CPython 使用 pandas 处理 CSV 文件,生成结果 CSV 文件并将新文件的名称返回给 Java 进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2019-10-16
      相关资源
      最近更新 更多