DataFrame.fromListOfMaps constructor
A data frame built from a list of maps.
Example:
final d = DataFrame.fromListOfMaps([
{"a": 1, "b": 5.1, "c": "red"},
{"a": 3, "b": 2.7, "c": "green"},
{"a": 5, "b": -0.9, "c": "red"},
]);
print(d);
.-.----.-------.
|a|b |c |
:-+----+-------:
|1|5.1 |red |
|3|2.7 |green |
|5|-0.9|red |
'-'----'-------'
Implementation
factory DataFrame.fromListOfMaps(
List<Map<String, Object>> data, {
Map<String, ColumnType>? types,
}) {
types = types ?? {};
final numericColumns = <String, NumericColumn>{},
categoricColumns = <String, CategoricColumn>{};
for (final key in data.first.keys) {
if (types.containsKey(key)) {
switch (types[key]!) {
case ColumnType.numeric:
numericColumns[key] = NumericColumn([]);
case ColumnType.categoric:
categoricColumns[key] = CategoricColumn([]);
}
} else {
final firstParsedValue = num.tryParse(data.first[key]!.toString());
if (firstParsedValue == null) {
types[key] = ColumnType.categoric;
categoricColumns[key] = CategoricColumn([]);
} else {
types[key] = ColumnType.numeric;
numericColumns[key] = NumericColumn([]);
}
}
}
for (final datum in data) {
for (final key in datum.keys) {
switch (types[key]!) {
case ColumnType.numeric:
numericColumns[key]!.add(
num.tryParse(datum[key]!.toString()) ?? double.nan,
);
case ColumnType.categoric:
categoricColumns[key]!.add(datum[key]!.toString());
}
}
}
return DataFrame(
numericColumns: numericColumns,
categoricColumns: categoricColumns,
);
}