我怎么用Jython进口Pandas

2024-06-17 13:38:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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

如果我想用熊猫,我该怎么解决?


Tags: csvorgtestimportpandasfordatamain
2条回答

目前不能将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特定的框架)。

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

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

作为CPython扩展实现的Python模块(如pandas)不一定与所有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 process可以向CPython提供CSV文件名,CPython使用pandas处理CSV文件,生成结果CSV文件并将新文件的名称返回给Java process。

相关问题 更多 >