Beim Austausch von Datenrahmen mit Python-> .NET verfügt die .NET-Seite zunächst über eine geeignete Standardbibliotheksklasse namens DataTable. Es verfügt nicht über die leistungsstarke Datenverarbeitungsleistung von Pandas und dplyr, kann jedoch vorerst zugeordnet werden. Wenn Sie es von Python auf BayesServer aus aufrufen möchten, wird empfohlen, wie unten gezeigt mit JPype auf die Java-Bibliothek zuzugreifen.
Auf der anderen Seite heißt es, dass Pythonnet in Ordnung ist, und ich bin mir nicht sicher, warum ich einen Java-Wrapper durchlaufen muss, obwohl er in .NET nativ ist. Deshalb habe ich mich entschlossen, dorthin zu gehen. Der R-Wrapper durchläuft auch den Java-Wrapper. Dabei müssen Sie zwei Arten von API-Referenzen betrachten. (Weil ich die .NET-Bibliothek sowieso ändern und neu verpacken werde) Ich hätte Python von Anfang an verwenden sollen. .. ..
pythonnet
pythonnet ist eine Python-zu-.NET-Zugriffsbibliothek namens Python für .NET. http://pythonnet.github.io/ Es kann sowohl beim Aufrufen von .NET aus Python als auch beim Aufrufen von Python aus .NET verwendet werden.
Python + .NET erinnert möglicherweise einige Leute an IronPython, aber es ist eine CLI-Sprache, die unter .NET ausgeführt wird. Damit ist die Unterstützung für Bibliotheken, die in der Datenwissenschaft usw. einen guten Ruf haben, begrenzt. Oder besser gesagt, Numpy funktioniert nicht.
Da Pythonnet nur eine Verbindung zwischen Sprachen herstellt, können Sie es verwenden und dabei die guten Punkte beider beibehalten. Es unterstützt auch den neuesten .NET Core. Sinnlich sprechen
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
Es gibt einen Vorgeschmack auf Import clr.
dynamic np = Py.Import("numpy");
var x = np.cos(np.pi * 2);
Es gibt einen Artikel von @hogegex in dieser Richtung.
Python von .NET (C #) aufrufen
Mögliche Verwendungszwecke sind das Aufrufen von .NET-spezifischen Bibliotheken (Geschäftssystemen usw.) aus Python und das Auslösen numerischer Berechnungsaufgaben aus .NET. Es scheint gut zu sein, Apps mit der .NET-GUI-Bibliothek unter Python erstellen zu können. Mein Ziel ist es jedoch, die BayesServer-Bibliothek von Python aus aufzurufen. Wenn ich also Folgendes tun kann, bin ich fast fertig.
Die BayesServer-Referenz bietet eine Hilfsfunktion für die Datenrahmenzuordnung, bei der jpype1 als Hilfsklasse verwendet wird.
Pandas DataFrame helper functions
Wahrscheinlich hat die Konvertierung mit jpype1 eine Angewohnheit, daher denke ich, dass sie so etwas vorbereitet haben, aber Pythonnet kann es einfacher schreiben. Ich habe es fast für .NET mit Kopieren und Einfügen umgeschrieben.
# %%
import numpy as np
import pandas as pd
import clr
from System.Data import *
# %%
def _to_net_class(data_type):
"""
Converts numpy data type to equivalent .NET class
:param data_type: the numpy data type
:return: The Net Class
"""
if data_type == np.int32:
return clr.GetClrType(Int32)
if data_type == np.int64:
return clr.GetClrType(Int64)
if data_type == np.float32:
return clr.GetClrType(Single)
if data_type == np.float64:
return clr.GetClrType(Double)
if data_type == np.bool:
return clr.GetClrType(Boolean)
if data_type == np.object:
return clr.GetClrType(Object)
raise ValueError('dtype [{}] not currently supported'.format(data_type))
# %%
def to_data_table(df):
data_table = DataTable()
for name, data_type in df.dtypes.iteritems():
net_class = _to_net_class(data_type)
data_table.Columns.Add(str(name),net_class)
for index, row in df.iterrows():
xs = [None if pd.isnull(x) else x for x in row]
data_table.Rows.Add(xs)
return data_table
Auf diese Weise können Pandas-Daten in die .NET-Bibliothek gebracht werden, sodass der Austausch mit einer GUI wie einer sogenannten Excel-Tabelle oder einer Datenbank möglicherweise einfacher ist. Stellen Sie sich clr.GetClrType () als Alternative zu typeof (oder Object.GetType ()) vor.
Recommended Posts