如何直接从熊猫包导入数据帧类



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

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__.pyimport *pandas/core/api.pypandas/core/api.py进口Dataframe那么您Dataframe直接导入大熊猫。

最新更新