2016-03-25 18 views
4

Ich bin neu zu Python, und ich habe Jython2.7.0Wie kann ich importieren Pandas mit Jython

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() 

Dann installieren Ich habe diesen Fehler erhalten.

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 

Wie kann ich dieses Problem beheben, wenn ich Pandas verwenden?

+0

Könnten Sie bitte erklären, warum Sie Jython anstelle von CPython verwenden? – farzad

+0

Und können Sie bitte weitere Informationen zu Ihrer Einrichtung geben? Wie haben Sie Jython und Pandas installiert? Genauer gesagt, wo hast du Pandas installiert? – farzad

+0

Weil ich einen Python-Code geschrieben habe, um .cvs zu importieren und Daten mit Pandas zu verarbeiten. Jetzt muss mein Chef mich dem Benutzer geben, der unter Java-Umgebung ist, aber ich benutze selten Java. Also wähle ich jython zum verbinden. –

Antwort

3

Soweit ich weiß pandas ist in cython geschrieben und ist eine CPython-Erweiterung. Das bedeutet, dass es soll durch CPython Implementierung der Python-Sprache verwendet werden soll (die die primäre implemntation ist die meisten Leute benutzen).

Jython ist eine Python-Implementierung Python-Programme auf JVM laufen und verwendet wird, die Integration mit Java-Bibliotheken zur Verfügung zu stellen, oder Python-Scripting von Java-Programmen usw.

Python-Modulen als CPython Erweiterungen implementiert (wie Pandas) nicht unbedingt kompatibel mit allen Python-Implementierungen (berühmte Implementierungen andere als CPython sind Jython, PyPy und IronPython)

Wenn Sie wirklich Jython und Pandas zusammen verwenden müssen, und man konnte nicht einen anderen Weg finden, das Problem zu lösen, dann schlage ich sie mit in verschiedenen Prozessen. Ein Java-Prozess ist Ihre Jython-Anwendung, die auf JVM läuft (entweder Java-Code, der Jython-Bibliotheken aufruft, oder ein Python-Code, der möglicherweise eine Integration mit einigen Java-Bibliotheken erfordert), und ein anderer CPython-Prozess wird ausgeführt, um Operationen von Pandas bereitzustellen.

dann irgendeine Form von IPC (oder Werkzeug) (Standard IO, Steckdosen, OS Rohre, gemeinsam genutzten Speicher, memcache, Redis, etc.) zu kommunizieren. Der Java - Prozess sendet eine Anfrage an CPython (oder registriert die Anfrage an Shared Storage), liefert Verarbeitungsparameter, CPython - Prozess verwendet Pandas, um Ergebnisse zu berechnen und sendet eine serialisierte Form der Ergebnisse zurück (oder setzt die Ergebnisse zurück auf die Geteiltes Lager).

Dieser Ansatz erfordert zusätzliche Codierung (aufgrund der Aufspaltung der Aufgaben in separate Prozesse) und Serialisierung der Anfrage/Antwort (die von der Anwendung und den Daten abhängt, die es zu verarbeiten versucht).

In diesem Beispielcode zu der Frage kann Java-Prozess den CSV-Dateinamen zu CPython bereitstellen, CPython verarbeitet die CSV-Datei mit Pandas, generiert die Ergebnis-CSV-Datei und gibt den Namen der neuen Datei an den Java-Prozess zurück.

4

Sie können Pandas derzeit nicht mit Jython verwenden, da dies von CPython-spezifischen nativen Erweiterungen abhängt. Eine Abhängigkeit ist NumPy, die andere ist Cython (das ist eigentlich kein nativer CPython Verlängerung, sondern erzeugt eine solche).

Halten Sie ein Auge auf die JyNI project ("Jython Native Interface"). Es ermöglicht Jython nativen CPython-Erweiterungen zu verwenden und sein genauer Zweck ist wie die von Ihnen festgestellte Probleme zu lösen. Es ist jedoch immer noch stark entwickelt und noch nicht in der Lage, Pandas oder NumPy in Jython zu laden, aber beide Frameworks stehen ganz oben auf der Prioritätenliste.

(z ctypes arbeitet bereits einige erweitern.)

Auch ist es nur noch POSIX (getestet auf Linux und OSX).

Wenn Sie Jython nicht speziell benötigen, aber nur einige Java/Pandas Interoperation, wäre eine bereits praktikable Lösung, den CPython-Interpreter einzubetten. JPY und JEP sind Projekte, die dies bereitstellen. Bei beiden sollte es möglich sein, Java und Pandas (oder jedes andere CPython-spezifische Framework) zu verwenden.