Lors de l'échange de cadres de données avec Python-> .NET en premier lieu, le côté .NET a une classe de bibliothèque standard appelée DataTable, qui convient. Il n'a pas la puissance de traitement de données haute performance de Pandas et de dplyr, mais il peut être mappé pour le moment. Si vous souhaitez l'appeler depuis Python sur BayesServer, il semble qu'il soit recommandé d'accéder à la bibliothèque Java en utilisant JPype comme indiqué ci-dessous.
D'un autre côté, cela dit que pythonnet va bien, et je ne sais pas pourquoi je dois passer par un wrapper Java même s'il est natif de .NET, alors j'ai décidé d'y aller. Le wrapper R passe également par le wrapper Java. Avec cela, vous devez examiner deux types de références API. (Parce que je vais quand même modifier la bibliothèque .NET et la réemballer) J'aurais dû utiliser Python depuis le début. .. ..
pythonnet
pythonnet est une bibliothèque d'accès Python vers .NET appelée Python pour .NET. http://pythonnet.github.io/ Il peut être utilisé à la fois lors de l'appel de .NET à partir de Python et lors de l'appel de Python à partir de .NET.
Python + .NET peut rappeler à certaines personnes IronPython, mais c'est un langage CLI qui s'exécute sur .NET. Avec cela, le support des bibliothèques qui ont une bonne réputation dans la science des données, etc. est limité. Ou plutôt, numpy ne fonctionne pas.
Puisque pythonnet ne se connecte qu'entre langues, vous pouvez l'utiliser tout en gardant les bons points des deux. Il prend également en charge le dernier .NET Core. Parler sensuellement
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
Il y a un avant-goût d'import clr.
dynamic np = Py.Import("numpy");
var x = np.cos(np.pi * 2);
Il y a un article de @hogegex dans ce sens.
Appeler python depuis .NET (C #)
Les utilisations possibles incluent l'appel de bibliothèques spécifiques à .NET (systèmes d'entreprise, etc.) à partir de Python et le lancement de tâches de calcul numérique à partir de .NET. Il semble bon de pouvoir créer des applications à l'aide de la bibliothèque GUI .NET sur Python. Cependant, mon but est d'appeler la bibliothèque BayesServer à partir de Python, donc si je peux faire ce qui suit, j'ai presque terminé.
La référence BayesServer fournit une fonction d'assistance de mappage de trame de données utilisant jpype1 comme classe d'assistance.
Pandas DataFrame helper functions
Probablement, la conversion utilisant jpype1 a une habitude, donc je pense qu'ils ont préparé une telle chose, mais pythonnet peut l'écrire plus directement. Je l'ai presque réécrit pour .NET avec copier-coller.
# %%
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
Avec cela, les données des pandas peuvent être importées dans la bibliothèque .NET, il peut donc être plus facile d'échanger avec une interface graphique telle qu'une table Excel ou une base de données. Pensez à clr.GetClrType () comme une alternative à typeof (ou Object.GetType ()).
Recommended Posts