我有一个Class Blah。然后我实例化我存储在数组中的数千个对象。我想将它存储在pandas数据框中。 我可以轻松地将数组转换为df,这不是问题。但这是浪费!
我想要做的是将DF中的每一行都视为Blah类的一个单独对象。这样我就可以创建自己的方法来进行更复杂的操作。
f.e:
for row in df :
row.blah_method()
有没有办法将每一行视为外部定义的类。
这似乎是我拥有的最好的情况!!
class Blah:
def __init__(self, row):
self.row = row
def say(self) : print self.row
for row in df.iterrows() : Blah(row).say()
答案 0 :(得分:1)
pd.DataFrame
您运气不好,因为pd.DataFrame
是pd.Series
pd.Series
。每列都被解释为另一列pd.Series
。如果没有这个,那么pd.DataFrame
的整个概念就会中断....
然而!您可以使用pd.Series
来执行您想要的操作。考虑我的玩具class
以及我们如何在系列中使用它。
class blah(object):
def __init__(self, i):
self.value = i
def __add__(self, other):
return blah(self.value + 2 * other.value)
def __repr__(self):
return str(self.value)
def blah_method(self):
return "Look at me <<<{}>>>".format(self.value)
a = blah(1)
b = blah(3)
a + b
7
现在让我们制作pd.Series
s = pd.Series([blah(1), blah(3), blah(-4), blah(7)])
s.sum()
13
和!查看sum
type(s.sum())
__main__.blah
使用apply
s.apply(blah.blah_method)
0 Look at me <<<1>>>
1 Look at me <<<3>>>
2 Look at me <<<-4>>>
3 Look at me <<<7>>>
dtype: object
迭代
for k, v in s.iteritems():
print(v.blah_method())
Look at me <<<1>>>
Look at me <<<3>>>
Look at me <<<-4>>>
Look at me <<<7>>>