2014-03-28 23 views
2

我寫在不同的時間段來計算各種熊貓dataframes的應用程序。這些Dataframe中的每一個都有需要與它們一起存儲的附加數據。命名Stuctured數據存儲在Python

我可以用列表或類型的字典進行數據很容易地定義一個結構,但如果是很好的結構,那將是很好的。

我已經看過(試過namedtuples)。這很好,因爲它在訪問信息時簡化了語法。元組的問題當然是不可改變的。

圍繞着這一得到的要麼做所有的Calcs(計算)的時間提前,並沒有能夠改變他們的生活(不通過幾個鐵圈跳),或者通過下面的代碼:

from collections import namedtuple 
m = namedtuple("Month", 'df StartDate EndDate DaysInMonth 
m.Month = 2 
m.df = pandas.DataFrame() 
etc.... 

這似乎工作,但我實際上濫用了指定的元組類。在上面的代碼中m實際上是一個「類型」而不是一個實例。雖然它正在工作,我現在可以指定它,但我可能會在稍後遇到一些問題。

type(m) 
>>> type 

上我是否能繼續採用這種結構,或者如果我倒是應該創建自己的數據結構類有什麼建議?

+0

「簡化的語法」,這就是我常說的'OrderedDicts'(或主要傳統字典的)。最重要的是你可以很好地處理你的數據集,我們可以繼續我們認爲最好的,但最終你會成爲一個將會工作並且應該理解代碼/語法的人。如果你問我們哪一個表現最好?那完全是另一個問題。 (這只是一個小側面說明):) – Torxed

+0

其實我其實是想了解爲什麼我寫的代碼工作。我可以分配給m並從中讀回。只是有一個令人討厭的懷疑,即使它現在起作用,如果我不清理它,它會回來咬我。 – Joop

回答

2

你在做什麼設置m.Month到2使用的是所有的東西類可以這樣做,因爲他們走路和說話像字典。

class Month(): 
    pass 

a = Month() 
a.df = 2 

這個工作沒有做任何特別的事。如果你看一下里面是_ 字典 _屬性

print(a.__dict__) 

你會看到類似下面的

{'__module__': '__main__', '__doc__': None, 'df': 2} 

,如果你想我可能會使用,而不是namedtuple空類稍後更改這些值。所有在後臺命名的機器都不會爲您的用例帶來任何益處。

+0

絕對正確。實際上可以將元數據直接添加到我的熊貓數據框中。有一些方法可能會破壞它的可能性,所以我決定把我的數據框包裝到一個類中並添加屬性。 – Joop