2017-04-25 132 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