我有一个像这样的课程...
class person:
def __init__(self, name):
self.name = name
self.carData = ""
self.HouseData = ""
#other assets
我正在像这样遍历它...
john = person('John');
for index, row in john.carData.iterrows():
#do something
for index, row in john.HouseData.iterrows():
#do something
但是在这种情况下,“做某事”是重复的代码-我想对carData,HouseData和一个人可以拥有的所有其他资产做同样的事情。
以非重复方式遍历这些内容的最佳方法是什么?我在类定义中考虑了这样的事情,但是我很确定它至少不优雅,而且可能是错误的...
class person:
def __init__(self, name):
self.name = name
self.carData = ""
self.HouseData = ""
#other assets
self.assets = [self.carData, self.HouseData etc]
john = person('John');
for asset in john.assets:
for index, row in asset.iterrows():
#do something
定义对象列表(在本例中为self.assets)本身是引用存储在类中的相同对象的一种不好做法吗?抱歉,如果您含糊不清-我只是想找出最干净的方法来应对这种情况。
答案 0 :(得分:1)
如果计划将相同的代码应用于对象的每个属性,则可以尝试 df['freq'] = df.groupby('category')['category'].transform('count')
df = df.drop_duplicates()
:
john.__dict__
请参见this question。
这是一种小技巧,但是如果(例如)您要将代码应用于除“名称”之外的每个属性,请执行以下操作:
john = person('John')
for attr, value in john.__dict__.items():
# e.g. attr == 'carData'
for index, row in value.iterrows():
# do something