Исходный код Pandas импортирует несколько модулей

Я просматривал исходный код панд здесь, и я нашел следующее утверждение немного странным:

from pandas._libs import NaT, groupby as libgroupby, iNaT, lib, reduction

Кажется, что он импортировал Nat и groupby, которые представляют собой две библиотеки, как несколько модулей (libgroupby, iNaT, lib, сокращение).

  1. Я зашел в библиотеку pandas._libs здесь, но не не могу найти ни одной модели с именем NaT. Действительно существует groupby.pyx, который, как я полагаю, является groupby библиотекой?

  2. Может ли количество импортируемых библиотек быть меньше импортируемых модулей? Как это работает? Насколько я понимаю, мы можем сделать import a as b, но не можем сделать import a as b, c.


person Jinhua Wang    schedule 05.02.2019    source источник
comment
На вторую часть вашего вопроса дан ответ здесь   -  person DavidW    schedule 05.02.2019
comment
@DavidW Спасибо, что указали мне в этом направлении!   -  person Jinhua Wang    schedule 05.02.2019


Ответы (1)


из pandas._libs он фактически импортировал 5 методов/классов/модулей:

  1. нат,
  2. grouby как libgroupy (поэтому в вашем сценарии вы теперь будете использовать libgroupy)
  3. иНаТ
  4. библиотека
  5. снижение

Теперь NaT и iNaT действительно не существуют в папке _libs, но это не приведет к ошибке импорта, потому что они импортированы из другого места в __init__.py _libs.
__init__.py пакета неявно выполняется всякий раз, когда что-то импортируется из этого Пакет или его подпакеты.
Таким образом, __init__.py внутри _libs будет выполняться, где NaT, iNaT etc. импортируется из пакета .tslibs, что делает их доступными для импорта и из пакета .libs.
Теперь, если вы будете искать NaT или iNaT в .tslibs папку, вы не найдете его, но если вы посмотрите на __init__.py из .tslibs, вы увидите, что здесь NaT и iNaT импортированы из .nattype, поэтому, если вы заглянете внутрь этого файла на этот раз, вы найдете определение NaT и iNaT в там.

Вы можете ознакомиться с документами. для лучшего объяснения


Вы можете импортировать его так, и тогда вам будет легче понять, что происходит:

from pandas._libs import NaT, iNaT, lib, reduction, groupby as libgroupby

Этот импорт будет делать то же самое, что и оператор импорта в вашем вопросе.

person Vaibhav Vishal    schedule 05.02.2019
comment
Спасибо! Очень точный ответ! - person Jinhua Wang; 05.02.2019