Когда мощь Python проигрывает простоте
Каждый аналитик рано или поздно встаёт перед выбором: писать «по-взрослому» на Python с pandas и tkinter — или взять инструмент, где задача решается в несколько строк. Я посчитал стаж сотрудников двумя способами.
Наша таблица сотрудников
Python: мощно, гибко, многословно
import pandas as pd
from tkinter import Tk, filedialog
# 1. Диалог выбора файла
Tk().withdraw()
input_path = filedialog.askopenfilename(
title="Выберите Excel-файл с сотрудниками",
filetypes=[("Excel files", "*.xlsx *.xls")],
)
if not input_path:
raise SystemExit("Файл не выбран — выход.")
# 2. Читаем
df = pd.read_excel(input_path)
# 3. Приём → дата
df["Приём"] = pd.to_datetime(df["Приём"], dayfirst=True, errors="coerce")
# 4. Сегодня
df["Сегодня"] = pd.Timestamp.today().normalize()
# 5. Полные года стажа
today_md = df["Сегодня"].dt.month * 100 + df["Сегодня"].dt.day
hire_md = df["Приём"].dt.month * 100 + df["Приём"].dt.day
years = (df["Сегодня"].dt.year - df["Приём"].dt.year
- (today_md < hire_md).astype(int))
# 6. Приводим стаж к целому (Int64 — поддерживает None)
df["Стаж"] = years.astype("Int64")
# 7. Даты — в формат ДД.ММ.ГГГГ
out = df.copy()
out["Приём"] = out["Приём"].dt.strftime("%d.%m.%Y")
out["Сегодня"] = out["Сегодня"].dt.strftime("%d.%m.%Y")
# 8. Вывод в консоль
print(out.to_string(index=False))
Что нужно знать, чтобы это написать:
- Tk().withdraw() — иначе висит пустое окно.
- dayfirst=True — иначе 15.03.2021 распарсится как 3-е число 15-го месяца.
- errors="coerce" — иначе одна битая ячейка уронит весь скрипт.
- Int64 (с большой буквы) — иначе None превратит стаж в 5.0, 7.0.
- .dt.strftime("%d.%m.%Y") — иначе даты выведутся как 2021-03-15.
- .to_string(index=False) — иначе pandas «сожмёт» столбцы и добавит индексы.
ArrayVator: 6 строк
m = OpenExcelShow()
m[1, "Сегодня"] = 0
m[1, "Стаж"] = 0
m[:, "Сегодня"] = datenow("DD.MM.YYYY")
m[:, "Стаж"] = age(m[:, "Приём"], m[:, "Сегодня"])
print(m)
Что нужно знать:
- OpenExcelShow() — открывает диалог для выбора файла.
- m[1, "Сегодня"] =0 — создали новый столбец и записали туда 0
- m[1, "Стаж"] = 0 — создали новый столбец и записали туда 0
- datenow("DD.MM.YYYY") — возвращает вектор строк в нужном формате.
- age() — считает полные годы и возвращает целое.
- print(m) — вывод в консоль.
Выбор пользователя
- Если задача разовая — «открыть Excel, посчитать, посмотреть» — ArrayVator экономит 80% времени и нервов.
- Если задача часть большого пайплайна — интеграция с API, ML-моделями, веб-сервисами — Python незаменим. Мощь pandas и экосистемы окупает многословность.
- Если учитесь — начните с ArrayVator, чтобы понять что вы делаете. Потом переходите на Python, чтобы понять как это устроено внутри.
Мощь — это про возможности. Простота — это про скорость до результата. В 2026 году, когда время дороже денег, для типовой табличной задачи простота побеждает. А мощь Python оставьте на тот день, когда простота упрётся в потолок