在熊猫中我们可以直接执行以下操作
import pandas as pd
df = pd.DataFrame()
在这里,熊猫是一个包。数据帧是一个类。那么,这是如何工作的,因为DataFrame实际上是在pandas.core.frame
中定义的(它是在熊猫核心文件夹中的 frame.py 中定义的。
注意:我认为这种行为可以通过在文件中执行某些操作来实现__init__.py
。谁能帮我理解这一点。
>__init__.py
在技术上只是另一个python模块,因此在包的__init__.py
中定义的任何名称都可以从包本身直接访问。在 Python 中,使用包的__init__.py
作为子模块/子包的外观确实是一种常见的模式。
FWIW指出,熊猫的__init__.py
虽然是使用__init__.py
作为门面的一个例子,但它并没有遵循良好做法,因为它使用"星导入"(from submodule import *
(,这使得追踪名称的来源(定义它的模块(非常痛苦 - 特别是对于像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
Dataframe
如你所说,是在pandas/core/frame.py中定义的。
让我们来看看 github 上 pandas 目录中的 pandas/__init__.py。
第 42 行:
from pandas.core.api import *
pandas/core/api.py 从 pandas/core/frame 导入Dataframe
.py在第 23 行:
from pandas.core.frame import DataFrame
因此,既然您在pandas/__init__.py
import *
从pandas/core/api.py
pandas/core/api.py
进口Dataframe
那么您Dataframe
直接导入大熊猫。