Chúng ta có thể nạp một khung DataFrame trong không gian .NET bằng cách sử dụng python sắt không? Nếu không, tôi đang nghĩ đến việc chuyển đổi gấu trúc df thành một tệp csv và sau đó đọc trong không gian .net.Chúng tôi có thể tải gấu trúc DataFrame trong .NET ironthon không?
Trả lời
Không, Pandas được liên kết khá tốt với CPython. Như bạn đã nói, đặt cược tốt nhất của bạn là thực hiện phân tích trong CPython với Pandas và xuất kết quả sang CSV.
Có thể gọi CPython từ NET sử dụng Python.NET:
Về tùy chọn bao gồm serialization:
tôi vẫn đang điều tra trường hợp tương tự - chúng tôi muốn để xử lý dữ liệu trong python và sau đó sử dụng kết quả trong C#. Yêu cầu của chúng tôi là (tốt nhất) giữ cho nền tảng phần python độc lập để chúng tôi có thể chạy số crunching của chúng tôi trên cả linux hoặc windows. câu chuyện dài ngắn, chúng tôi quyết định sử dụng hệ nhị phân serialization/deserialization với tin nhắn Gói: http://msgpack.org/index.html
Chúng tôi chuyển đổi các giá trị DataFrame vào danh sách, và serialize sang file:
import msgpack as mp
data_as_list = df.values.tolist()
mp.pack(data_as_list, open("d:\\msgpack1.mp",'wb'))
Sau đó trên C# bên chúng ta sử dụng. thực hiện ròng MessagePack để deserialize dữ liệu:
using MsgPack;
var serializer =
SerializationContext.Default.GetSerializer<MessagePackObject[][]>();
var unpackedObject = serializer.Unpack(File.OpenRead("d:\\msgpack1.mp"));
lợi thế chính của serialization nhị phân:
- là ít bị bất kỳ vấn đề mã hóa liên quan so với văn bản định dạng serialization dựa như csv, json hoặc xml
- tùy thuộc vào dữ liệu mà nó có thể nhanh hơn so với định dạng CSV (đó là trong trường hợp của chúng tôi): http://matthewrocklin.com/blog/work/2015/03/16/Fast-Serialization/
Pandas dựa vào sự numpy, mà theo hiểu biết của tôi có một cổng khá vững chắc với IronPython bây giờ. Nhưng nó cũng phụ thuộc vào Cython và C để đạt được hiệu suất cao, phải không? Thứ hai có lẽ là vấn đề lớn, không phải là vất vả. –