function DataFrame(data, columns) {
	    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

	    _classCallCheck(this, DataFrame);

	    var _this$_build = this._build(data, columns);

	    var _this$_build2 = _slicedToArray(_this$_build, 2);

	    this[__rows__] = _this$_build2[0];
	    this[__columns__$1] = _this$_build2[1];
	    this.options = options;
	    this.options.modules = [].concat(_toConsumableArray(DataFrame.defaultModules), _toConsumableArray(this.options.modules || []));
	    Object.assign.apply(Object, [this].concat(_toConsumableArray(this.__instanciateModules__(this.options.modules))));
	  }
Create a new DataFrame.
@param {Array | Object | DataFrame} data The data of the DataFrame.
@param {Array} columns The DataFrame column names.
@param {Object} options Additional options. Example: modules.
@example
new DataFrame({
     'column1': [3, 6, 8],
     'column2': [3, 4, 5, 6],
}, ['column1', 'column2'])

new Data Frame([
     [1, 6, 9, 10, 12],
     [1, 2],
     [6, 6, 9, 8, 9, 12],
], ['c1', 'c2', 'c3', 'c4', 'c5', 'c6'])

new DataFrame([
     {c1: 1, c2: 6, c3: 9, c4: 10, c5: 12},
     {c4: 1, c3: 2},
     {c1: 6, c5: 6, c2: 9, c4: 8, c3: 9, c6: 12},
], ['c1', 'c2', 'c3', 'c4', 'c5', 'c6'])

new DataFrame(df);

new DataFrame(yourData, yourColumns, {modules: [MyOwnModule, MyOtherModule]})