constructor(data: Array<Object> | Object, kwargs: Object = {}) {
    super(data, kwargs);

    if (Array.isArray(data)) {
      this._values = Immutable.List(data);
      this._dtype = arrayToDType(data);
    } else if (data instanceof Immutable.List) {
      this._values = data;
      this._dtype = arrayToDType(data);
    } else {
      this._values = Immutable.List.of(data);
      this._dtype = arrayToDType([data]);
    }

    this._name = typeof kwargs.name !== 'undefined' ? kwargs.name : '';

    this.set_axis(0, parseIndex(kwargs.index, this.values));
    this._setup_axes(Immutable.List.of(0));

    // $FlowFixMe TODO
    this._sort_ascending = this._sort_ascending.bind(this);
    // $FlowFixMe TODO
    this._sort_descending = this._sort_descending.bind(this);
  }
One dimensional array with axis labels. An `Immutable.List` serves as the numpy.ndarray for
values.

Operations between `Series` (+, -, /, *, **) align values based on their associated index
values

@param {Array|List} data
   Data to be stored in Series
@param {Object} kwargs
   Extra optional arguments for a Series
@param {string} [kwargs.name='']
   The _name to assign to the Series
@param {Array|List} [kwargs.index]

@example
const ds = new Series([1, 2, 3, 4], {name: 'My test name', index: [2, 3, 4, 5]})
ds.toString()
// Returns:
// 2  1
// 3  2
// 4  3
// 5  4
// Name: My test name, dtype: dtype(int)