2017-04-25 184 views
0

我有一個函數返回一個熊貓數據框的字典。字典有一個關鍵字,每個數據幀的關鍵是它的對應名稱。Python:返回函數變量並分配給新變量

def fun(inputs): 
x = calculations 
y = calculations 
z = calculations, etc. 
return: {'name1':x,'name2':y,'name3':z} 

我想在我的代碼的其他地方使用一些dataframes作爲變量。爲此,我目前執行以下操作:

x = fun() 
var1 = x['name1'] 
var2 = x['name2'] 
var3 = x['name3'] 

等等。我想更有效地做到這一點(更少的代碼行)。在我看來,我應該可以做這樣的事情:

[var1,var2,var3] = fun() 

但是,這只是每個名字分配給每一個變量爲一個字符串。這可以做到嗎?還是應該我的功能輸出設置不同?

+2

爲什麼不只是使用字典*? –

+1

@ juanpa.arrivillaga:所有時間到達[['']'鍵都很笨拙,它會使你的語句變得笨重,而且你的IDE不會像變量一樣對字典條目有幫助。 – user2357112

+1

然後不要使用字典,並返回一個元組並使用元組解包分配。 –

回答

4

namedtuple

  • importnamedtuple功能collections
  • 使用它來創建一個新的class然後你可以用它來實例化新的類成員
  • 訪問命名的元素現在利用點符號。

from collections import namedtuple 

mydfs = namedtuple('MyDFs', ['name1', 'name2', 'name3']) 

def fun(inputs): 
    x = calculations 
    y = calculations 
    z = calculations, etc. 
    return mydfs(x, y, z) 


x = fun(inputs) 

x.name1 

如果你願意,你也可以解開其中的一個:

var1, var2, var3 = x 

老回答

最簡單的方法是通過該字典的pd.Panel構造函數

pn = pd.Panel({'name1':x,'name2':y,'name3':z}) 

這現在可以被認爲是一系列的數據幀。每個數據幀可以通過pn['name1']等訪問。

+1

因此......我們訪問數據框的方式與字典完全一樣嗎?目前還不清楚這是如何讓我們獲得任何地方。 – user2357112

+0

@ user2357112'True'。這是更方便的粘性結構。但訪問是相同的。我將不得不重新考慮它。 – piRSquared

+1

'pd.Panel'也面臨着即將到來的折舊,我最近了解到。 – miradulo