熊猫全球数据框架

时间:2014-08-07 23:11:46

标签: python pandas global-variables

为什么这段代码错了?

不是全球变量?

import pandas as pd

D = pd.DataFrame()
D['z'] = [2]


def funz2(z):
    d = pd.DataFrame()
    d['z'] = z
    D = D.append(d)
    print(D)


print(funz2(4))

这是错误消息

In [22]: ---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-22-68bb930462f5> in <module>()
----> 1 __pyfile = open('''/tmp/py3865JSV''');exec(compile(__pyfile.read(), '''/home/donbeo/Desktop/prova.py''', 'exec'));__pyfile.close()

/home/donbeo/Desktop/prova.py in <module>()
     14 
     15 
---> 16 print(funz2(4))

/home/donbeo/Desktop/prova.py in funz2(z)
     10     d = pd.DataFrame()
     11     d['z'] = z
---> 12     D = D.append(d)
     13     print(D)
     14 

UnboundLocalError: local variable 'D' referenced before assignment

编辑: 如果变量不是自动全局的。 它为什么有效?

x = 3 

def funz(z):
    return z * x

print(funz(4))

2 个答案:

答案 0 :(得分:3)

您的funz2当然可以访问您在其外宣布的D变量。

您看到的问题是因为您已使用以D开头的行向funz函数声明了另一个D=变量。这个本地的优先于其他全局的,因此你得到了例外。

你可以做的是正如亚历克斯·伍尔福德所建议的那样,将funz函数中的D声明为全局,使用全局语句实际上说'看到D在那里,我不想声明没有本地D var那里我希望它引用其他全局的那个'。

答案 1 :(得分:1)

默认情况下,Python变量的范围不是全局变量。这是设计的:如果函数可以改变函数外部定义的变量,那将是危险的。这是一个更有说服力的解释:Using global variables in a function other than the one that created them

如果要在函数中向行追加行,可以将其声明为全局:

global D = pd.DataFrame()

在读取变量时,Python首先查找其本地范围,如果找不到该名称,它将开始查看包含的范围。

相关问题