Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable

Datenaustausch zwischen Python- und .NET-Tabellen

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.

Setup Python

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.

Python DataFrame-> .NET DataTable-Konvertierung

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

Konvertieren Sie mit Python für .NET von Pandas DataFrame in System.Data.DataTable
Python-Pandas: Suchen Sie mit regulären Ausdrücken nach DataFrame
[Python] Erstellen Sie eine Tabelle von Pandas DataFrame zu Postgres
[Python] Liste in Pandas konvertieren [Pandas]
Konvertieren Sie die Liste mit Python in DataFrame
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
Von Python bis zur Verwendung von MeCab (und CaboCha)
Konvertieren Sie von Katakana zu Vokal Kana [Python]
[Python] Fügen Sie Pandas DataFrame insgesamt Zeilen hinzu
Python> Ausgaben von 1 bis 100, 501 bis 600> Für CSV
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
In Python von Markdown in HTML konvertieren
Von der Vorbereitung der morphologischen Analyse mit Python unter Verwendung von Polyglot bis zur Teilwortmarkierung
[Python / Tkinter] Suche nach Pandas DataFrame → Erstellen Sie ein einfaches Suchformular zur Anzeige
[Python] Konvertieren von DICOM in PNG oder CSV
[Python-Pandas] Erstellen Sie einen leeren DataFrame aus einem vorhandenen DataFrame
Ich möchte mit Python eine E-Mail von Google Mail senden.
Konvertieren Sie STL mit Python VTK in ein Voxel-Netz
[Python-Lernteil 3] Konvertieren Sie Pandas DataFrame, Series und Standard List ineinander
Ich habe versucht, Python-Code aus .Net mit Pythonnet auszuführen (Hallo World Edition)
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Python-Anwendung: Pandas # 3: Dataframe
So konvertieren Sie den Python # -Typ für Super-Anfänger von Python: str
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Konvertieren Sie durch Kommas getrennte numerische Zeichenfolgen in Zahlen in Pandas DataFrame
MessagePack-Aufruf von Ruby to Python-Methoden (oder Python to Ruby-Methoden) mithilfe von RPC
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
[Python] Zusammenfassung der Methode zur Tabellenerstellung mit DataFrame (Pandas)
Kopieren Sie S3-Dateien mit GSUtil von Python nach GCS
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
Abfrage von Python an Amazon Athena (unter Verwendung des benannten Profils)
Eine echte Möglichkeit für Benutzer von Python 3.8.0-2 aus Windows, mit Multi-Byte-Zeichen zu arbeiten
Mit Python abflachen
[Python] Datum in Zeichenfolge konvertieren
Post von Python nach Slack
Konvertieren Sie numpy int64 in python int
Verwenden Sie IvyFEM (Finite-Elemente-Methodenbibliothek für .NET) aus Python
Flirte von PHP nach Python
Kompilieren Sie Tesseract für Tess4J, um Bilder mit CentOS zu transkribieren
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
So konvertieren Sie den Python # -Typ für Python-Superanfänger: int, float
[Für Anfänger] Skript innerhalb von 10 Zeilen (4. Verbindung von Python zu sqlite3)
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
100 Pandas klopfen für Python-Anfänger
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Datenanalyse mit Python-Pandas
Exportieren Sie den Pandas-Datenrahmen nach Excel