Swift MLDataTable - как убрать строки?

Я создаю MLDataTable из.csv-файла и хотел бы удалить некоторые строки, то есть все строки, в которых конкретный столбец имеет определенное значение - возможно ли это?

1 ответ

Решение

Я знаю, что несколько опоздал с ответом, но, надеюсь, кто-то найдет его полезным.

Вы не можете удалить строки из данной таблицы на месте, но вы можете создать новую таблицу с отфильтрованными строками.

Вот пример таблицы:

let employeesDict: [String: MLDataValueConvertible] = [
    "First Name": ["Alice", "Bob", "Charlie", "Dave", "Eva"],
    "Years of experience": [10, 1, 8, 5, 3],
    "Gender": ["female", "male", "male", "male", "female"],
]

let employeesTable = try! MLDataTable(dictionary: employeesDict)

Фильтрация достигается путем передачи экземпляра MLDataColumn<Bool> к оператору индекса таблицы. Apple называет это "маской строки". Вот маска строки для фильтрации женских экземпляров, созданных вручную:

let maleEmployeesMaskByHand = MLDataColumn([false, true, true, true, false])

Передав это в качестве аргумента employeesTableПодстрочный оператор 's дает следующую таблицу:

let maleEmployeesTable = employeesTable[maleEmployeesMaskByHand]
print(maleEmployeesTable)
+----------------+----------------+---------------------+
| Gender         | First Name     | Years of experience |
+----------------+----------------+---------------------+
| male           | Bob            | 1                   |
| male           | Charlie        | 8                   |
| male           | Dave           | 5                   |
+----------------+----------------+---------------------+

Вот еще один способ создать ту же маску строки:

let genderColumn: MLDataColumn<String> = employeesTable["Gender"]
let maleEmployeesMask = genderColumn != "female"
print(employeesTable[maleEmployeesMask])

Сначала извлекается нужный столбец, а затем - благодаря перегрузке оператора - строится маска строки с применением != оператор на весь столбец.

Вот способ добиться того же в одной строке:

print(employeesTable[ employeesTable["Gender"] != "female" ])

Ссылка на соответствующую документацию: https://developer.apple.com/documentation/createml/mldatatable/3006094-subscript

Другие вопросы по тегам