【问题标题】:Using python pandas module in Eclipse Mars在 Eclipse Mars 中使用 python pandas 模块
【发布时间】:2016-04-04 09:01:02
【问题描述】:

我在 Eclipse 中结合了 java 和 python 代码,当我想执行包含从 java 类调用的 pandas 模块的 python 脚本时,我得到 null 值。否则,如果我不使用 pandas 模块,而只是使用简单的 python 脚本,一切正常。我假设 PyDev 解释器正确,并且所有 python 模块的路径都配置正确,因为我没有收到任何导入错误,并且当我在代码中将鼠标悬停在它上面时,我可以获得模块信息。

所有模块都在 /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()

这些是包含和不包含 pandas 模块的输出:

Hello
value is :

Hello
Hello inside
value is : Hello inside

配置图:

您对使用 pandas 模块运行代码有什么问题有什么建议吗?

谢谢!

【问题讨论】:

    标签: java eclipse python-2.7 pydev


    【解决方案1】:

    您可以调查的一些让我感觉不对的事情:

    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 以正确设置以在调试器中运行)。

    【讨论】:

    • 感谢法比奥!我做了你所说的一切,现在 PyDev 报告 AttributeError: 'module' object has no attribute 'Integral',对于 numbers module,这是 numpy module 的一部分,当我运行 python 时,这很奇怪。
    【解决方案2】:

    我找到了解决这个问题的方法。最有效的方法是使用没有 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)时存在某种问题。

    【讨论】:

      【解决方案3】:

      您也可以尝试以下步骤。我是从blog 那里得到的,这对我很有帮助。但是步骤是...

      第一次下载并安装 Anaconda 2.x 然后如下

      对我来说,解决问题的唯一方法是完全删除(window->preferences->pydev->interpreter python->remove),然后使用 Auto Config 再次添加它。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 2016-06-02
        • 2016-09-03
        • 1970-01-01
        • 2015-09-12
        • 2015-12-27
        相关资源
        最近更新 更多