我正在尝试构建一个类中所有属性的名称列表,这些属性是pandas DataFrames或Series。
以下工作但似乎很慢,因为它遍历dir()
列出的每个属性,包括特殊方法(特殊方法不是DataFrames,所以不需要检查它们)。它似乎也在其他方法中执行print
语句,因此不确定是否正在运行其他属性(不需要)。
my_instance = MyClass()
pd_objects = [attr for attr in dir(my_instance) if
isinstance(getattr(my_instance, attr), pd.DataFrame)
or isinstance(getattr(my_instance, attr), pd.Series)]
有关快速列出分配了pandas对象的属性的更有效方法的任何想法,可能使用inspect
模块?
答案 0 :(得分:2)
我不知道使用inspect()
模块的任何方法,而是dir()
,您可以尝试使用vars()
,它会返回传递给对象的__dict__
它,所以它没有特殊的方法,等等。例如 -
my_instance = MyClass()
pd_objects = [attr for attr in vars(my_instance) if
isinstance(getattr(my_instance, attr), pd.DataFrame)
or isinstance(getattr(my_instance, attr), pd.Series)]
请注意,这仍然会评估属性,因为没有评估属性,就无法确定它包含/返回的内容(这很可能是你看到的print
语句被执行了。
返回具有
__dict__
属性的模块,类,实例或任何其他对象的__dict__
属性。
答案 1 :(得分:1)
您想使用class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(name: params[:session][:name])
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to user
# Sign the user in and redirect to the user's show page.
else
flash.now[:error] = 'Invalid email/password combination'
redirect 'new'
end
end
def destroy
end
end
。
__dict__
然后像这样使用它:
class A(object):
def __init__(self):
self.df2 = pd.DataFrame({'df2': range(5)})
self.sr2 = pd.Series(range(5))
self.x = 4
self.y = 'abc'
self.z = []
def get_attributes_of_type(cls, types):
return [i for _, i in cls.__dict__.iteritems() if isinstance(i, types)]