Czy możemy załadować pandas DataFrame w przestrzeni .NET przy użyciu żelaznego pythona? Jeśli nie, to mam zamiar przekonwertować panda df na plik csv, a następnie czytać w przestrzeni .net.Czy możemy załadować pandas DataFrame w .NET ironpython?
Odpowiedz
Nie, Panda jest dość dobrze przywiązana do CPython. Tak jak powiedziałeś, najlepiej jest wykonać analizę w CPython za pomocą Pand i wyeksportować wynik do pliku CSV.
Jest możliwe, aby zadzwonić CPython z .NET przy użyciu Python.NET:
Odnośnie opcji w tym serializacji:
ja nadal bada podobny przypadek - chcemy przetwarzać danych w python, a następnie użyj wyników w języku C#. Naszym wymaganiem było (najlepiej) utrzymywanie niezależności platformy Pythona, abyśmy mogli uruchomić naszą liczbę kompresji na Linuksie lub w oknach. Krótko mówiąc zdecydowaliśmy się użyć binarny serializacji/deserializacji z komunikatem pakietu: http://msgpack.org/index.html
Konwertujemy wartości DataFrame do listy i serializacji do pliku:
import msgpack as mp
data_as_list = df.values.tolist()
mp.pack(data_as_list, open("d:\\msgpack1.mp",'wb'))
Następnie na # boku C możemy użyć. realizacja netto MessagePack deserializacji dane:
using MsgPack;
var serializer =
SerializationContext.Default.GetSerializer<MessagePackObject[][]>();
var unpackedObject = serializer.Unpack(File.OpenRead("d:\\msgpack1.mp"));
Główne zalety serializacji binarnej:
- jest mniej podatny na wszelkie problemy kodowania związanych porównywanie tekstu formaty oparte serializacji jak CSV, JSON lub XML
- w zależności od danych może być szybsze niż CSV (to było w naszym przypadku): http://matthewrocklin.com/blog/work/2015/03/16/Fast-Serialization/
Panda polega na numpy, która według mojej wiedzy ma już całkiem niezły port IronPython. Ale to także zależy od Cythona i C, aby osiągnąć wysoką wydajność, prawda? To ostatnie jest prawdopodobnie dużym problemem, a nie numpy. –