DataFrame.fromMapOfLists constructor

DataFrame.fromMapOfLists(
  1. Map<String, List<Object>> data, {
  2. Map<String, ColumnType>? types,
})

A data frame built from a map of lists.

Example:

final d = DataFrame.fromMapOfLists({
   "a": [1, 3, 5],
   "b": [5.1, 2.7, -0.9],
   "c": ["red", "green", "red"],
});
print(d);

.-.----.-------.
|a|b   |c      |
:-+----+-------:
|1|5.1 |red    |
|3|2.7 |green  |
|5|-0.9|red    |
'-'----'-------'

Implementation

factory DataFrame.fromMapOfLists(
  Map<String, List<Object>> data, {
  Map<String, ColumnType>? types,
}) {
  types = types ?? {};
  final numericColumns = <String, NumericColumn>{},
      categoricColumns = <String, CategoricColumn>{};
  for (var MapEntry(key: key, value: xs) in data.entries) {
    if (types.containsKey(key)) {
      switch (types[key]!) {
        case ColumnType.numeric:
          numericColumns[key] = NumericColumn(
              xs.map((x) => num.tryParse(x.toString()) ?? double.nan));
        case ColumnType.categoric:
          categoricColumns[key] =
              CategoricColumn(xs.map((x) => x.toString()));
      }
    } else {
      final firstParsedValue = num.tryParse(xs.first.toString());
      if (firstParsedValue == null) {
        categoricColumns[key] = CategoricColumn(xs.map((x) => x.toString()));
      } else {
        numericColumns[key] = NumericColumn(
            xs.map((x) => num.tryParse(x.toString()) ?? double.nan));
      }
    }
  }

  return DataFrame(
    numericColumns: numericColumns,
    categoricColumns: categoricColumns,
  );
}