/// <summary> /// Converts an enumerable of <see cref="IBaseData"/> in a pandas.DataFrame /// </summary> /// <param name="data">Enumerable of <see cref="Slice"/></param> /// <returns><see cref="PyObject"/> containing a pandas.DataFrame</returns> public PyObject GetDataFrame <T>(IEnumerable <T> data) where T : IBaseData { PandasData sliceData = null; foreach (var datum in data) { if (sliceData == null) { sliceData = new PandasData(datum); } sliceData.Add(datum); } using (Py.GIL()) { // If sliceData is still null, data is an empty enumerable // returns an empty pandas.DataFrame if (sliceData == null) { return(_pandas.DataFrame()); } return(sliceData.ToPandasDataFrame()); } }
/// <summary> /// Converts an enumerable of <see cref="Slice"/> in a pandas.DataFrame /// </summary> /// <param name="data">Enumerable of <see cref="Slice"/></param> /// <returns><see cref="PyObject"/> containing a pandas.DataFrame</returns> public PyObject GetDataFrame(IEnumerable <Slice> data) { var maxLevels = 0; var sliceDataDict = new Dictionary <Symbol, PandasData>(); foreach (var slice in data) { foreach (var baseData in slice.Values) { PandasData value; if (!sliceDataDict.TryGetValue(baseData.Symbol, out value)) { sliceDataDict.Add(baseData.Symbol, value = new PandasData(baseData)); maxLevels = Math.Max(maxLevels, value.Levels); } value.Add(baseData); } } using (Py.GIL()) { if (sliceDataDict.Count == 0) { return(_pandas.DataFrame()); } var dataFrames = sliceDataDict.Select(x => x.Value.ToPandasDataFrame(_pandas, maxLevels)); return(_pandas.concat(dataFrames.ToArray())); } }
/// <summary> /// Converts an enumerable of <see cref="Slice"/> in a pandas.DataFrame /// </summary> /// <param name="data">Enumerable of <see cref="Slice"/></param> /// <returns><see cref="PyObject"/> containing a pandas.DataFrame</returns> public PyObject GetDataFrame(IEnumerable <Slice> data) { var maxLevels = 0; var sliceDataDict = new Dictionary <Symbol, PandasData>(); foreach (var slice in data) { foreach (var key in slice.Keys) { var baseData = slice[key]; PandasData value; if (!sliceDataDict.TryGetValue(key, out value)) { sliceDataDict.Add(key, value = new PandasData(baseData)); maxLevels = Math.Max(maxLevels, value.Levels); } if (value.IsCustomData) { value.Add(baseData); } else { var ticks = slice.Ticks.ContainsKey(key) ? slice.Ticks[key] : null; var tradeBars = slice.Bars.ContainsKey(key) ? slice.Bars[key] : null; var quoteBars = slice.QuoteBars.ContainsKey(key) ? slice.QuoteBars[key] : null; value.Add(ticks, tradeBars, quoteBars); } } } using (Py.GIL()) { if (sliceDataDict.Count == 0) { return(_pandas.DataFrame()); } var dataFrames = sliceDataDict.Select(x => x.Value.ToPandasDataFrame(maxLevels)); return(_pandas.concat(dataFrames.ToArray())); } }