Python 如何直接从包导入Dataframe类

Python 如何直接从包导入Dataframe类,python,pandas,python-import,Python,Pandas,Python Import,在熊猫中,我们可以直接执行以下操作 import pandas as pd df = pd.DataFrame() 这里,熊猫是一个包裹。DataFrame是一个类。那么,这是如何工作的,因为DataFrame实际上是在pandas.core.frame中定义的(它是在pandas的core文件夹中的frame.py中定义的) 注意:我认为这种行为可以通过在\uuu init\uuu.py文件中执行某些操作来实现。有谁能帮我理解这一点。Dataframe正如您所说的,是在中定义的 让我们看看

在熊猫中,我们可以直接执行以下操作

import pandas as pd

df = pd.DataFrame()
这里,熊猫是一个包裹。DataFrame是一个类。那么,这是如何工作的,因为DataFrame实际上是在pandas.core.frame中定义的(它是在pandas的core文件夹中的frame.py中定义的)


注意:我认为这种行为可以通过在
\uuu init\uuu.py
文件中执行某些操作来实现。有谁能帮我理解这一点。

Dataframe
正如您所说的,是在中定义的

让我们看看github上的熊猫

第42行:

from pandas.core.api import *
并从第23行中导入数据帧:

from pandas.core.frame import DataFrame

因此,既然您在
pandas/\uuu init\uuuuuuuuuuuuuuuuuuuuuuuupy
pandas/core/api.py
导入
Dataframe
中从
pandas/core/api.py
导入了
Dataframe
,那么您就直接将
Dataframe
导入到了pandas中。

\uuuu init\uuuu.py
中定义的任何名称都可以直接从包本身访问。在Python中,使用包的
\uuu init\uuu.py
作为

FWIW注意到,panda的
\uuuu init\uuuuuuuuuuuuuy.py
,虽然是使用
\uuuuuu init\uuuuuuuuuuuuuuuuuuuy.py
作为外观的一个例子,但它没有遵循好的做法,因为它使用了“星型导入”(
来自子模块导入*
),这使得追踪名称(定义它的模块)的起源非常痛苦-特别是像Panda这样的大型软件包-也非常脆弱,因为如果两个子模块导出相同的名称,最后导入的子模块将与第一个子模块形成阴影。最佳做法是始终明确指定要导入的名称:

from submodule1 import foo, bar
from submodule2 import baaz, quux
这清楚地说明了名称的来源,并将使重复的名称更加明显:

from submodule1 import foo, bar
from submodule2 import baaz, quux
from submodule3 import foo # oops, we will have to rename either this one or submodule1.foo

python包的
\uuuu init\uuuuuuy.py
文件中导入的所有内容都将在包的顶层可用(您可以通过在
\uuuu init\uuuuuuy
中创建一个名为
\uuu all\uuuuuuuuuuuuuuuuuuuuuuu>的列表来限制此行为,其中包含所有您希望可用的名称)@Jacquot,谢谢。这有助于我理解