Действия со столбцами
При работе с таблицей часто нужно оставить только нужные столбцы, убрать лишние, переименовать столбцы или создать новый вычисляемый признак.
В DataFrame такие операции не изменяют исходную таблицу. Каждый метод возвращает новый DataFrame, поэтому результат нужно сохранить в новую переменную или присвоить обратно той же переменной.
var df2 := df.Select(['Имя', 'Класс', 'Балл']);Если старая версия таблицы больше не нужна, можно написать так:
df := df.Select(['Имя', 'Класс', 'Балл']);Такой стиль делает код более явным: всегда видно, на каком шаге получается новая таблица.
Выбор столбцов
Заголовок раздела «Выбор столбцов»Select оставляет в таблице только указанные столбцы.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс,Рост,Вес,Балл Анна,8А,160,50,91 Борис,8Б,172,63,76 Вера,8А,158,48,84 ''');
var marks := df.Select(['Имя', 'Класс', 'Балл']);
marks.Print;end.Вывод:
Имя Класс Балл Анна 8А 91Борис 8Б 76 Вера 8А 84Исходная таблица df при этом не меняется. Новая таблица хранится в переменной marks.
Удаление столбцов
Заголовок раздела «Удаление столбцов»Drop удаляет указанные столбцы и возвращает новую таблицу.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс,Рост,Вес,Балл Анна,8А,160,50,91 Борис,8Б,172,63,76 Вера,8А,158,48,84 ''');
var shortDf := df.Drop(['Рост', 'Вес']);
shortDf.Print;end.Вывод:
Имя Класс Балл Анна 8А 91Борис 8Б 76 Вера 8А 84Select и Drop часто решают похожие задачи:
Selectудобен, когда нужно явно перечислить нужные столбцы;Dropудобен, когда нужно убрать несколько лишних столбцов.
Переименование столбца
Заголовок раздела «Переименование столбца»Rename меняет имя столбца в новой таблице.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс,Рост,Вес,Балл Анна,8А,160,50,91 Борис,8Б,172,63,76 Вера,8А,158,48,84 ''');
var renamed := df.Rename('Балл', 'ИтоговыйБалл');
renamed.Print;end.Переименование полезно, когда названия пришли из файла и их нужно сделать понятнее для дальнейшего кода.
Новый вычисляемый столбец
Заголовок раздела «Новый вычисляемый столбец»Методы WithColumn... добавляют новый столбец. Суффикс в имени метода задаёт тип нового столбца: например, WithColumnBool, WithColumnInt, WithColumnFloat, WithColumnString.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Имя,Класс,Рост,Вес,Балл Анна,8А,160,50,91 Борис,8Б,172,63,76 Вера,8А,158,48,84 ''');
var withPassed := df.WithColumnBool( 'Сдал', row -> row['Балл'] >= 80 );
withPassed.Print;end.Вывод:
Имя Класс Рост Вес Балл Сдал Анна 8А 160 50 91 TrueБорис 8Б 172 63 76 False Вера 8А 158 48 84 TrueВ лямбда-выражении row -> ... доступна текущая строка таблицы. Значения столбцов можно читать по имени, например row['Балл'].
Числовой признак
Заголовок раздела «Числовой признак»Новый столбец может быть не только логическим, но и числовым. Например, вычислим сумму продажи по количеству и цене.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Товар,Категория,Количество,Цена Хлеб,Продукты,2,45.50 Молоко,Продукты,1,72.90 Блокнот,Канцтовары,3,120 ''');
var withTotal := df.WithColumnFloat( 'Сумма', row -> row['Количество'] * row['Цена'] );
withTotal.Select(['Товар', 'Количество', 'Цена', 'Сумма']).Print;end.Такой приём часто используется при подготовке признаков: из существующих столбцов создаются новые, более удобные для анализа или обучения модели.
Цепочка операций
Заголовок раздела «Цепочка операций»Так как операции возвращают новый DataFrame, их можно объединять в цепочку.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Товар,Категория,Количество,Цена Хлеб,Продукты,2,45.50 Молоко,Продукты,1,72.90 Блокнот,Канцтовары,3,120 ''');
var res := df .Drop(['Категория']) .Rename('Цена', 'ЦенаРуб') .WithColumnFloat('Сумма', row -> row['Количество'] * row['ЦенаРуб']);
res.Print;end.Цепочка читается сверху вниз: удалить лишний столбец, переименовать цену, добавить вычисляемую сумму.
Что важно помнить
Заголовок раздела «Что важно помнить»Select,Drop,RenameиWithColumn...не изменяют исходныйDataFrame.- Если нужен результат операции, его надо сохранить.
Selectоставляет указанные столбцы.Dropудаляет указанные столбцы.Renameпереименовывает столбец.WithColumn...создаёт новый вычисляемый столбец.- Цепочки операций помогают записывать обработку таблицы как последовательность понятных шагов.