Перейти к содержимому

Дата и время

Столбцы с датой и временем нужны для журналов, расписаний, продаж, измерений и любых данных, где важен порядок событий.

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 помогает получить год, месяц, день и другие части даты.