将行视为外部定义的类的实例?

时间:2017-04-04 21:19:58

标签: python class pandas row

我有一个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()

1 个答案:

答案 0 :(得分:1)

pd.DataFrame您运气不好,因为pd.DataFramepd.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>>>