如果代码的某个子模块加载了大型模块,那么从该命名空间引用该模块而不是再次导入该模块是否有任何好处?
例如:我有一个模块MyLib,它广泛使用ReallyBigLib.如果我有导入MyLib的代码,我应该像这样挖出模块
import MyLib
ReallyBigLib = MyLib.SomeModule.ReallyBigLib
Run Code Online (Sandbox Code Playgroud)
要不就
import MyLib
import ReallyBigLib
Run Code Online (Sandbox Code Playgroud) 这是一个比较宽泛的话题,但我将尝试将其缩减为一些具体问题。
在开始回答关于 SO 的问题时,我发现自己在制作玩具数据时有时会遇到这样的愚蠢错误:
In[0]:
import pandas as pd
df = pd.DataFrame({"values":[1,2,3,4,5,6,7,8,9]})
df[df < 5] = np.nan
Out[0]:
NameError: name 'np' is not defined
Run Code Online (Sandbox Code Playgroud)
我很用来自动导入numpy使用pandas,这并不通常发生在实际的代码。但是,它确实让我想知道为什么pandas没有自己的值/对象来表示空值。
我最近才意识到你可以使用 PythonNone代替类似的情况:
import pandas as pd
df = pd.DataFrame({"values":[1,2,3,4,5,6,7,8,9]})
df[df < 5] = None
Run Code Online (Sandbox Code Playgroud)
它按预期工作并且不会产生错误。但是我觉得我看到的 SO 的约定是使用np.nan,人们np.nan在讨论空值时通常会提到这个约定(这也许是我没有意识到None可以使用的原因,但也许那是我自己的特质) .
简要地研究一下,我现在看到它自 1.0.0 以来pandas 确实具有pandas.NA价值,但我从未见过有人在帖子中使用它:
In[0]:
import pandas as pd
import numpy as np
df = pd.DataFrame({'values':np.random.rand(20,)})
df['above'] …Run Code Online (Sandbox Code Playgroud)