Дата и время
Столбцы с датой и временем нужны для журналов, расписаний, продаж, измерений и любых данных, где важен порядок событий.
DataFrame умеет автоматически распознавать даты при загрузке CSV. После этого дату можно печатать в нужном формате, фильтровать, сортировать и разбивать на год, месяц или день.
Распознавание даты
Заголовок раздела «Распознавание даты»Если значения записаны как даты, DataFrame распознаёт столбец как DateTime. Поддерживается ISO-формат 2024-09-01 и привычный русский формат 01.09.2024.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Дата,Температура 01.09.2024,18 02.09.2024,20 03.09.2024,17 ''');
df.PrintInfo;end.PrintInfo покажет, что столбец Дата имеет тип datetime.
ISO-формат — это запись даты в порядке год-месяц-день, например 2024-09-01. Русский формат обычно записывается как день.месяц.год: 01.09.2024.
Формат вывода
Заголовок раздела «Формат вывода»Для печати даты в привычном виде используется параметр dateTimeFormat.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Дата,Температура 01.09.2024,18 02.09.2024,20 03.09.2024,17 ''');
df.Print(dateTimeFormat := 'dd.MM.yyyy');end.Формат влияет только на вывод. Значения в таблице остаются значениями DateTime.
Фильтрация по периоду
Заголовок раздела «Фильтрация по периоду»Для фильтрации удобно создать границы периода через DateTime.Create.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Дата,Температура 2024-09-01,18 2024-09-02,20 2024-09-03,17 2024-09-04,21 ''');
var d1 := DateTime.Create(2024, 9, 2); var d2 := DateTime.Create(2024, 9, 3);
var period := df.Filter(row -> (row.DateTime('Дата') >= d1) and (row.DateTime('Дата') <= d2) );
period.Print(dateTimeFormat := 'dd.MM.yyyy');end.Так можно выбрать строки за нужный день, месяц или произвольный интервал.
Сортировка по дате
Заголовок раздела «Сортировка по дате»SortBy сортирует DateTime-столбец как дату, а не как текст.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Дата,Событие 2024-09-03,Контрольная 2024-09-01,Начало темы 2024-09-02,Практика ''');
df.SortBy('Дата').Print(dateTimeFormat := 'dd.MM.yyyy');end.Части даты
Заголовок раздела «Части даты»WithDatePart создаёт новый столбец из части даты: года, месяца, дня и так далее.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Дата,Температура 2024-09-01,18 2024-09-02,20 2024-10-01,12 2024-10-02,14 ''');
var byMonth := df.WithDatePart('Дата', 'Месяц', dpMonth);
byMonth.Print(dateTimeFormat := 'dd.MM.yyyy');end.Основные варианты:
dpYear— год;dpMonth— месяц;dpDay— день месяца;dpDayOfWeek— день недели;dpDate— дата без времени.
Группировка по месяцу
Заголовок раздела «Группировка по месяцу»После выделения части даты можно использовать обычную группировку.
uses MLABC;
begin var df := DataFrame.FromCsvText(''' Дата,Температура 2024-09-01,18 2024-09-02,20 2024-10-01,12 2024-10-02,14 ''');
df.WithDatePart('Дата', 'Месяц', dpMonth) .GroupBy('Месяц') .Mean('Температура') .Print;end.Такая цепочка сначала добавляет столбец Месяц, затем группирует строки по месяцу и считает среднюю температуру.
Что важно помнить
Заголовок раздела «Что важно помнить»- Даты обычно распознаются автоматически при загрузке CSV.
- Для вывода используйте
dateTimeFormat. - Для фильтрации по периоду удобно создавать даты через
DateTime.Create. SortByсортируетDateTime-столбцы в хронологическом порядке.WithDatePartпомогает получить год, месяц, день и другие части даты.