Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET

Échange de données de table Python et .NET

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.

Setup Python

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é.

Conversion Python DataFrame-> .NET DataTable

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

Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
Pandas Python: recherchez DataFrame à l'aide d'expressions régulières
[python] Créer une table de pandas DataFrame vers postgres
[Python] Convertir la liste en Pandas [Pandas]
Convertir la liste en DataFrame avec python
[Python] Extraction / combinaison de données aléatoires à partir de DataFrame en utilisant random et pandas
De Python à l'utilisation de MeCab (et CaboCha)
Conversion de katakana en voyelle kana [python]
[Python] Ajouter le nombre total de lignes à Pandas DataFrame
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Créer un bloc de données à partir d'Excel à l'aide de pandas
Convertir de Markdown en HTML en Python
De la préparation à l'analyse morphologique avec python en utilisant polyglotte au marquage des mots partiels
[Python / Tkinter] Rechercher Pandas DataFrame → Créer un formulaire de recherche simple à afficher
[Python] Conversion de DICOM en PNG ou CSV
[Pandas Python] Créer un DataFrame vide à partir d'un DataFrame existant
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
Convertir STL en maillage Voxel à l'aide de Python VTK
[Formation Python partie 3] Convertissez les pandas DataFrame, Series et Standard List entre eux
J'ai essayé d'exécuter du code Python à partir de .Net en utilisant Pythonnet (édition Hallo World)
Convertir 202003 en 2020-03 avec les pandas
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Application Python: Pandas # 3: Dataframe
Comment convertir le type Python # pour les super débutants de Python: str
Notification PUSH de Python vers Android à l'aide de l'API de Google
Résumé des méthodes de prétraitement pour les débutants en Python (trame de données Pandas)
Convertir des chaînes numériques séparées par des virgules en nombres dans Pandas DataFrame
Méthodes MessagePack-Call Python (ou Python vers Ruby) à partir de Ruby à l'aide de RPC
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Python] Résumé de la méthode de création de table utilisant DataFrame (pandas)
Copier les fichiers S3 de Python vers GCS à l'aide de GSUtil
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
Requête de Python vers Amazon Athena (à l'aide du profil nommé)
Un véritable moyen pour les personnes utilisant python 3.8.0-2 à partir de Windows de travailler avec des caractères multi-octets
Aplatir à l'aide du rendement Python de
[python] Convertir la date en chaîne
Publier de Python vers Slack
Convertir numpy int64 en python int
Utiliser IvyFEM (bibliothèque de méthodes d'éléments finis pour .NET) à partir de Python
Flirter de PHP à Python
Compilez Tesseract pour Tess4J pour transcrire des images à l'aide de CentOS
Essayez d'exploiter un fichier Excel en utilisant Python (Pandas / XlsxWriter) ①
Essayez d'exploiter un fichier Excel en utilisant Python (Pandas / XlsxWriter) ②
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
Convertir le projet Scratch en Python
[Python] Convertir Shift_JIS en UTF-8
Comment convertir le type Python # pour les super débutants de Python: int, float
[Pour les débutants] Script dans 10 lignes (4. Connexion de python à sqlite3)
Introduction à Python pour les utilisateurs de VBA - Appeler Python depuis Excel avec xlwings -
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Pandas 100 coups pour les débutants en Python
[Python] Introduction à la création de graphiques à l'aide de données de virus corona [Pour les débutants]
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Analyse de données à l'aide de pandas python
Exporter la trame de données pandas vers Excel