Применение пакета packaging.version к элементам dataframe

Рейтинг: 0Ответов: 1Опубликовано: 27.04.2023

Имеется MultiIndex Dataframe, в котором хранятся граничные версии пакетов в формате string:

>>> print(target_indexes)

              0       1
  match                
0 0           0  3.6.14
  1       3.7.0  3.7.11
  2       3.8.0  3.8.11
  3       3.9.0   3.9.5
  4      3.10.0  3.10.0
1 0           0   3.6.3
2 0           0   3.7.9
  1       3.6.0  3.6.12
  2       3.7.0   3.7.9
  3           0  3.5.10
  4       3.8.0   3.8.5

Также есть версия, которая должна входить в интервал между этими граничными версиями. lib_version = '3.8.1' Хочу применить пакет packaging.version (https://packaging.pypa.io/en/latest/version.html#packaging.version.Version), с помощью которого можно легко сравнить версии, но не могу понять каким образом это сделать. Нужно оставить только строки, которые бы удовлетворяли условию.

Смог сделать фильтрацию по принципу сравнения строк друг с другом, но при сравнении теряются вхождения вида 3.9 < 3.10 (ибо строка 3.9 считается больше строки 3.10)

target_indexes = target_indexes[target_indexes[0].le(lib_version) & target_indexes[1].ge(lib_version)]

Подскажите, пожалуйста, как можно проитерироваться по строкам и вытащить на каждом этапе элементы, чтобы сравнить их как объекты Version и запомнить индексы нужной строки? Ничего подобного в интернете не смог найти.

Ответы

▲ 1Принят

Попробуйте для начала импортировать parse из того пакета и сделать target_indexes[0].map(parse) ну или возможно apply тоже работает, не уверен. А дальше если всё сработает можете навешивать .le, только тоже Version(lib_version) сделайте.

Как-то так:

from packaging.version import Version, parse

target_indexes = target_indexes[target_indexes[0].map(parse).le(Version(lib_version)) & \
                                target_indexes[1].map(parse).ge(Version(lib_version))]