Python 熊猫源代码导入多个模块

Python 熊猫源代码导入多个模块,python,python-3.x,pandas,cython,pandas-groupby,Python,Python 3.x,Pandas,Cython,Pandas Groupby,我在查看pandas的源代码时,发现以下语句有点奇怪: from pandas._libs import NaT, groupby as libgroupby, iNaT, lib, reduction 它似乎将Nat和groupby(这两个库)作为多个模块(libgroupby、iNaT、lib、reduce)导入 我去了熊猫图书馆,但没有找到任何名为NaT的模型。确实有一个groupby.pyx,我假设它就是groupby库 导入的库的数量是否可以少于导入的模块?这是怎么回事?根据我过去的

我在查看pandas的源代码时,发现以下语句有点奇怪:

from pandas._libs import NaT, groupby as libgroupby, iNaT, lib, reduction
它似乎将Nat和groupby(这两个库)作为多个模块(libgroupby、iNaT、lib、reduce)导入

  • 我去了熊猫图书馆,但没有找到任何名为NaT的模型。确实有一个
    groupby.pyx
    ,我假设它就是
    groupby

  • 导入的库的数量是否可以少于导入的模块?这是怎么回事?根据我过去的理解,我们可以
    将a作为b导入
    ,但我们不能
    将a作为b导入,c


  • 从pandas.\u libs中,它实际导入了5个方法/类/模块:

  • 纳特
  • grouby作为libgroupy(因此在脚本中现在将使用libgroupy)
  • iNaT
  • 解放党
  • 减少

  • 现在
    NaT
    iNaT
    确实不存在于
    \u libs
    文件夹中,但它不会给出导入错误,因为它们是从库的
    \u init\u.py
    中的其他地方导入的。
    每当从某个包或其子包导入某个内容时,该包的
    \uuuu init\uuuuuuuuuuuuupy.py
    就会隐式执行。
    因此将执行
    \u libs
    内部的
    \u init\uuuuuuuuuuuuuuuupy
    ,其中
    NaT、iNaT等
    从包
    导入。tslibs
    因此也可从
    .libs
    包导入。
    现在,如果您在.tslibs文件夹中查找
    NaT
    iNaT
    ,您将找不到它,但是如果您查看
    \uuu init\uuuuuuuuuuupy
    。tslibs
    您将在这里看到
    NaT
    iNaT
    是从
    导入的,因此,如果您这次查看该文件,您将在其中找到
    NaT
    iNaT
    的定义

    你可以看一下这本书,以得到更好的解释


    您可以这样导入,这样您就更容易理解发生了什么:

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

    此导入操作与您问题中的导入语句的操作完全相同。

    您问题的第二部分得到了回答@DavidW感谢您为我指明了方向!谢谢非常精确的答案!