withMissingValuesDropped method
A new data frame comprising the rows without any missing values.
Example:
final d = """
a,b
1,apple
2,ball
<NA>,cat
4,<NA>
5,egg
""".parseAsCsv();
print(d);
print(d.withMissingValuesDropped());
.---.-------.
|a |b |
:---+-------:
|1 |apple |
|2 |ball |
|NaN|cat |
|4 |<NA> |
|5 |egg |
'---'-------'
.-.-------.
|a|b |
:-+-------:
|1|apple |
|2|ball |
|5|egg |
'-'-------'
Implementation
DataFrame withMissingValuesDropped([Iterable<String>? columns]) {
columns =
columns ?? [...this.numericColumns.keys, ...this.categoricColumns.keys];
if (columns.any((key) =>
!this.numericColumns.containsKey(key) &&
!this.categoricColumns.containsKey(key))) {
throw PackhorseError.badArgument(
"Bad column names $columns" "(DataFrame.withMissingValuesDropped).");
}
final numericColumns = <String, NumericColumn>{},
categoricColumns = <String, CategoricColumn>{},
indicesWithMissingValues = _rowIndicesWithMissingValues(columns),
indicesWithoutMissingValues = [
for (var i = 0; i < rowNumber; i++)
if (!indicesWithMissingValues.contains(i)) i
];
for (final MapEntry(:key, :value) in this.numericColumns.entries) {
numericColumns[key] =
NumericColumn(value.valuesAtIndices(indicesWithoutMissingValues));
}
for (final MapEntry(:key, :value) in this.categoricColumns.entries) {
categoricColumns[key] =
CategoricColumn(value.valuesAtIndices(indicesWithoutMissingValues));
}
return DataFrame(
numericColumns: numericColumns,
categoricColumns: categoricColumns,
);
}