在 Eclipse Mars 中使用 python pandas 模块
Using python pandas module in Eclipse Mars
我在 Eclipse 中组合 java 和 python 代码,当我想执行 python 包含从 java 调用的 pandas 模块的脚本时 class 我得到 null
值。否则,如果我不使用 pandas 模块,而是使用简单的 python 脚本,一切正常。我假设 PyDev
解释器正确并且所有 python 模块的路径配置正确,因为我没有收到任何导入错误,并且当我在代码中将鼠标悬停在它上面时我可以获得模块信息。
所有模块都在 /usr/local/lib/python2.7/site-packages.
请检查 java class
、python script
和 PyDev
配置:
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 模块的代码中可能存在的问题吗?
谢谢!
我觉得有些不对劲的事情你可以调查一下:
你设置的 PYTHONPATH 是你不应该在你的脚本中做的事情,而是从外部设置 PYTHONPATH(或者在 PyDev 中,让它为你管理它)--此外,没有理由将 report1.csv 放入 PYTHONPATH(即:不要将东西放入 sys.path)。
pd.read_csv("report1.csv",sep=",",header=None):使用 report1.csv 的完整路径。
为您的代码创建一个单独的项目——不要将其放入 /usr/local/bin/python2.7.
不过,我不太确定哪里出了问题,但我的建议是首先让它在普通 Python 中工作(因此,使用 pydev 调试器 运行 你的 python 编码并调试错误),然后才考虑将其集成到 java/jython 中(确保阅读入门手册 http://www.pydev.org/manual_101_root.html 以在调试器中正确设置 运行) .
我找到了这个问题的解决方案。最有效的方法是在没有 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)时有问题。
您也可以尝试以下步骤。这是我从 blog 那里得到的,这对我很有帮助。但是步骤是...
第一次下载并安装 Anaconda 2.x 然后如下
对我来说唯一解决问题的方法是完全删除 (window->preferences->pydev->interpreter python->remove) 然后用自动配置再次添加它.
如果你有一些包没有安装然后 运行 控制台中的这个命令
conda install <package_name>
它将被下载并立即运行。
我在 Eclipse 中组合 java 和 python 代码,当我想执行 python 包含从 java 调用的 pandas 模块的脚本时 class 我得到 null
值。否则,如果我不使用 pandas 模块,而是使用简单的 python 脚本,一切正常。我假设 PyDev
解释器正确并且所有 python 模块的路径配置正确,因为我没有收到任何导入错误,并且当我在代码中将鼠标悬停在它上面时我可以获得模块信息。
所有模块都在 /usr/local/lib/python2.7/site-packages.
请检查 java class
、python script
和 PyDev
配置:
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 模块的代码中可能存在的问题吗?
谢谢!
我觉得有些不对劲的事情你可以调查一下:
你设置的 PYTHONPATH 是你不应该在你的脚本中做的事情,而是从外部设置 PYTHONPATH(或者在 PyDev 中,让它为你管理它)--此外,没有理由将 report1.csv 放入 PYTHONPATH(即:不要将东西放入 sys.path)。
pd.read_csv("report1.csv",sep=",",header=None):使用 report1.csv 的完整路径。
为您的代码创建一个单独的项目——不要将其放入 /usr/local/bin/python2.7.
不过,我不太确定哪里出了问题,但我的建议是首先让它在普通 Python 中工作(因此,使用 pydev 调试器 运行 你的 python 编码并调试错误),然后才考虑将其集成到 java/jython 中(确保阅读入门手册 http://www.pydev.org/manual_101_root.html 以在调试器中正确设置 运行) .
我找到了这个问题的解决方案。最有效的方法是在没有 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)时有问题。
您也可以尝试以下步骤。这是我从 blog 那里得到的,这对我很有帮助。但是步骤是...
第一次下载并安装 Anaconda 2.x 然后如下
对我来说唯一解决问题的方法是完全删除 (window->preferences->pydev->interpreter python->remove) 然后用自动配置再次添加它.
如果你有一些包没有安装然后 运行 控制台中的这个命令
conda install <package_name>
它将被下载并立即运行。