2015-12-30 150 views
0

我在Eclipse中结合了java和python代码,当我想执行包含pandas模块的python脚本时,我从java class中调用了null值。否则,如果我不使用熊猫模块,但只是简单的Python脚本一切正常。我认为PyDev解释器正确,并且所有python模块的路径配置正确,因为我没有得到任何导入错误,并且当我在代码中覆盖鼠标时,我可以获取模块信息。在Eclipse中使用python pandas模块火星

所有模块位于/usr/local/lib/python2.7/site-packages。

请检查java classpython scriptPyDev配置:

package test4; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Scanner; 

public class test4 { 

public static void main(String a[]){ 
    try{ 

    ProcessBuilder pb = new ProcessBuilder("/usr/local/bin/python2.7","solinor_final.py"); 
    Process p = pb.start(); 
    System.out.println("Hello"); 
    String line = null; 
    StringBuilder sb = new StringBuilder(); 
    BufferedReader in = null; 

    try { 
     in = new BufferedReader(new InputStreamReader(p.getInputStream())); 

     while((line=in.readLine())!=null) { 
      sb.append(line); 
      System.out.println(line); 

     } 


    } finally { 

     in.close(); 
    } 


    System.out.println("value is : "+sb); 

    }catch(Exception e){System.out.println(e);} 
    } 

} 

的Python:

import sys 

    sys.path.append("/usr/local/bin") 
    sys.path.append("/usr/bin/") 
     sys.path.append('/Users/quuppa/Documents/workspace/test4/report1.csv') 


import pandas as pd 


def main(): 
    import python_class as so 
    print "Hello inside" 

    data = pd.read_csv("report1.csv",sep=",",header=None) 
    data = data.rename(columns={0:'Merchant name',1:'Business ID',2:'Main merchant ID',3:'Report type',4:'Report search date',5:'Report period',\ 
          6:'Outlet name',7:'Address',8:'Number of transactions',9:'Value of transactions',10:'Commission',11:'Chargebacks and adjustments',12:'Settlement value'}) 

    data = data.drop([data.index[0]]) 

    bd = so.Solinor(data) 

    total_amount = bd.totalAmount() 
    print total_amount 

if __name__ == "__main__": 
    main() 

这些是具有和不包括大熊猫模块的输出:

Hello 
value is : 

Hello 
Hello inside 
value is : Hello inside 

配置图像:

enter image description here

你有任何建议,这可能是在运行与大熊猫模块的代码有问题吗?

谢谢!

回答

0

我找到了解决这个问题的方法。最有效的方法就是使用没有PyDev和PYTHONPATH设置的ProcessBuilder。必要的修改是在ProcessBuilder中添加第一个参数成为python安装的完整路径,在我的情况下,这是在/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/ python2.7,第二个参数是主Python脚本的完整路径。

第二种修改是将python脚本放在Eclipse工作区之外,并将完整路径作为ProcessBuilder中的第二个参数传递给主python脚本。我认为PyDev以某种方式在阅读使用C编写的库(例如numpy)时遇到问题。

0

有些事情,我感觉不对劲了,你可以调查:

  1. 你设置的PYTHONPATH是你不应该在你的脚本做,而是已在PYTHONPATH从外部设定(或者在PyDev中,让它为你管理它) - 也没有理由把report1.csv放在PYTHONPATH中(即:不要把东西放在sys.path中)。

  2. pd.read_csv(“report1.csv”,sep =“,”,header = None):使用report1.csv的完整路径。

  3. 为你的代码创建一个单独的项目 - 不要把它放到/usr/local/bin/python2.7。

不过,我真的不知道什么是错的,但我的建议是首先使得它在普通的Python工作(因此,使用PyDev调试运行Python代码和调试出了什么问题)后,才和考虑将其集成到java/jython中(请确保您阅读入门手册http://www.pydev.org/manual_101_root.html以正确设置以在调试器中运行)。

+0

谢谢法比奥!我做了你所说的一切,现在PyDev报告'AttributeError:'模块'对象没有属性'Integral'',作为'noduy模块'的一部分'numbers module',当我运行python时非常奇怪。 – Beltrif

0

你也可以尝试下面的步骤。我从blog得到这个,这对我很有帮助。然而,步骤...

1日下载和安装蟒蛇2.x和然后如下

对我说,解决这个问题唯一的办法就是彻底删除(窗口 - >首选项 - > pydev->解释器python->删除),然后用Auto Config再次添加它。

如果你有一些软件包没有安装,那么只需在控制台 conda install <package_name>下运行这个命令,它将被下载并应该立即工作。