2017-04-04 53 views
1

我有一班布拉赫。然後我實例化數千個存儲在數組中的對象。我想將它存儲在熊貓數據框中。 我可以很容易地將數組轉換爲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

你的運氣對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>>> 
+0

我明白你的意思。它吸吮,因爲我想使用其他DF功能。 – user1019129

+0

@ user1019129可以隨時投票,如果這是有用的。此外,請提問您想要做什麼的具體問題。 – piRSquared

相關問題