如何直接从pandas包中导入Dataframe类

时间:2018-06-22 12:09:24

标签: python pandas python-import

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

import pandas as pd

df = pd.DataFrame()

在这里,pandas是一个包装。 DataFrame是一个类。因此,这是如何工作的,因为DataFrame实际上是在pandas.core.frame中定义的(它是在pandas核心文件夹内的frame.py中定义的)。

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

2 个答案:

答案 0 :(得分:4)

__init__.py从技术上来说只是另一个python模块,因此可以直接从包本身访问包__init__.py中定义的任何名称。在Python中,使用包的__init__.py作为a facade for submodules / subpackages的确是一种常见的模式。

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

答案 1 :(得分:2)

Dataframe是您在pandas/core/frame.py中定义的。

让我们看看github上的熊猫pandas/__init__.py中的directory

第42行:

from pandas.core.api import *

第23行中的pandas/core/api.pypandas/core/frame.py导入Dataframe

from pandas.core.frame import DataFrame

因此,由于您从import *中的pandas/core/api.py pandas/__init__.pypandas/core/api.py导入了Dataframe,所以Dataframe被直接导入了熊猫。