熊猫:功能中的本地与全局数据帧

时间:2017-02-08 15:33:07

标签: python function

我不明白这里的最佳做法是什么:

我想在我的函数中修改数据框datadata是全球定义的。但是,如果我在函数中指定global选项,我必然会收到错误,因为data =定义了一个局部变量。

data = pd.DataFrame({'A' : [1, 2, 3, 4],
                     'B' : [1, 2, 3, 4]})

def test(data):
    global data
    data =  data + 1
    return data

test(data) 
SyntaxError: name 'data' is local and global

这是否意味着在处理数据帧时我不能使用global参数?

def test2(data):
    data =  data + 1
    return data

也不起作用。这就是原始的data未被修改。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:7)

如果您想在功能中使用全局data,请不要将其作为参数传递:

import pandas as pd

data = pd.DataFrame({'A' : [1, 2, 3, 4],
                     'B' : [1,2,3,4]})
def test():
    global data
    data =  data + 1

test()

另一种选择是保留参数并分配调用函数的结果:

import pandas as pd

data = pd.DataFrame({'A' : [1, 2, 3, 4],
                     'B' : [1,2,3,4]})

def test(data):
   data =  data + 1
   return data

data = test(data)

您可以看到,对全局变量和局部变量使用相同的名称会让事情变得有些混乱。如果你想走这条路,使用不同的名字可以让你的大脑更容易:

import pandas as pd

g_data = pd.DataFrame({'A' : [1, 2, 3, 4],
                       'B' : [1,2,3,4]})

def test(data):
    data =  data + 1
    return data

g_data = test(g_data)