使用IronPython的deedle

时间:2013-12-23 20:08:55

标签: ironpython deedle

可以从IronPython中有效地使用Deedle吗?这样做似乎有些不合适,但看起来让大熊猫从IronPython中完全工作可能很困难 - 有一些非活动的移植项目和使用IronClad的方法,但是如果有人真的成功完成的话还不清楚。使用像Deedle这样的纯.NET解决方案似乎是一条更好的路线。

2 个答案:

答案 0 :(得分:0)

Deedle是一个标准的.NET库。我对IronPython的了解有些限制,但我认为它可以让你使用.NET语言 - 所以它也应该与Deedle一起使用。 Deedle文档has a number of examples showing how to use it from C#,如果您知道如何使用IronPython中的其他.NET库,您应该能够将C#示例翻译为IronPython。

答案 1 :(得分:0)

我个人的经验是尝试让像熊猫这样的CPython库来处理ironpython是一个死胡同。虽然there is a way to do it,但它非常不稳定且不可靠。

Deedle似乎是下一个明显的选择,而且它有效。您只需要添加对程序集的引用,并且还要注意IronPython如何处理泛型参数。

import clr;
import random;
from System import Tuple;
import itertools;

clr.AddReferenceToFileAndPath ("C:\\temp\\testedeedle\\packages\\FSharp.Core\\lib\\net40\\FSharp.Core.dll")
clr.AddReferenceToFileAndPath ("C:\\temp\\testedeedle\\packages\\Deedle\\lib\\net40\\Deedle.dll")

from Deedle import *

那么您可以使用现有的Api创建数据帧,例如:

myPythonList = [("ID1", 1.1, 1.2), 
                ("ID2", 1.1, 1.2),
                ("ID3", 1.1, 1.2),
                ("ID4", 1.1, 1.2)];

values = [[Tuple.Create[str,str,float](x[0], "FirstValue", x[1]), Tuple.Create(x[0], "SecondValue", x[2])] for x in myPythonList]
tupleList =list((itertools.chain(*values)))
frame = Frame.FromValues[str,str,float](tupleList);
FrameExtensions.Print(frame);
series_mult = frame.FirstValue + frame.SecondValue
print (series_mult)
frame2 = frame * 2
FrameExtensions.Print(frame2);

...产量

       FirstValue SecondValue 
ID1 -> 1.1        1.2         
ID2 -> 1.1        1.2         
ID3 -> 1.1        1.2         
ID4 -> 1.1        1.2         

series [ ID1 => 2.3; ID2 => 2.3; ID3 => 2.3; ID4 => 2.3]
       FirstValue SecondValue 
ID1 -> 2.2        2.4         
ID2 -> 2.2        2.4         
ID3 -> 2.2        2.4         
ID4 -> 2.2        2.4