为什么在Python中无法从apply函数内部访问其他变量?

为什么在Python中无法从apply函数内部访问其他变量?,python,pandas,Python,Pandas,为什么以下代码不会影响输出数据帧?(这个例子本身并不有趣——它是一种“复制”数据帧的复杂方式。) 是否有一种方法可以获得这样的功能,即使用apply函数,从而影响其他变量?会发生什么 DataFrame.append()返回一个新的数据帧。它不会修改输出,而是每次创建一个新的输出 将other行追加到此帧的末尾,返回新的 对象不在此框架中的列将作为新列添加 在这里: 您创建了一个新的数据帧,但立即将其丢弃 您有访问权限,但不应该以这种方式使用它 虽然这样做有效,但我强烈建议不要使用global:

为什么以下代码不会影响
输出
数据帧?(这个例子本身并不有趣——它是一种“复制”数据帧的复杂方式。)

是否有一种方法可以获得这样的功能,即使用
apply
函数,从而影响其他变量?

会发生什么
DataFrame.append()
返回一个新的数据帧。它不会修改输出,而是每次创建一个新的输出

other
行追加到此帧的末尾,返回新的 对象不在此框架中的列将作为新列添加

在这里:

您创建了一个新的数据帧,但立即将其丢弃

您有访问权限,但不应该以这种方式使用它 虽然这样做有效,但我强烈建议不要使用
global

df = DataFrame([1, 2, 3])
df2 = DataFrame()

def get_row(row):
    global df2
    df2 = df2.append(row)

df.apply(get_row)
print(df2)
输出:

   0  1  2
0  1  2  3
把它当作发生了什么的示范。不要在代码中使用它。

会发生什么
DataFrame.append()
返回一个新的数据帧。它不会修改输出,而是每次创建一个新的输出

other
行追加到此帧的末尾,返回新的 对象不在此框架中的列将作为新列添加

在这里:

您创建了一个新的数据帧,但立即将其丢弃

您有访问权限,但不应该以这种方式使用它 虽然这样做有效,但我强烈建议不要使用
global

df = DataFrame([1, 2, 3])
df2 = DataFrame()

def get_row(row):
    global df2
    df2 = df2.append(row)

df.apply(get_row)
print(df2)
输出:

   0  1  2
0  1  2  3

把它当作发生了什么的示范。不要在代码中使用它。

非常感谢。为了完整性起见,为什么您会说这样使用
global
是个坏主意?当您使用
global
时,您很容易在看似不相关的代码片段之间创建隐式依赖关系。这会导致很难理解的程序。一个改变“外部世界”的函数可能会产生很多难以发现的问题。从技术上讲,我认为在通过
调用函数的情况下,变量是“外部世界”。apply
是因为函数是从pandas库内部调用的,而不是从脚本本身调用的。因此,如果不是
global
,就看不到该变量。非常感谢。为了完整性起见,为什么您会说这样使用
global
是个坏主意?当您使用
global
时,您很容易在看似不相关的代码片段之间创建隐式依赖关系。这会导致很难理解的程序。一个改变“外部世界”的函数可能会产生很多难以发现的问题。从技术上讲,我认为在通过
调用函数的情况下,变量是“外部世界”。apply
是因为函数是从pandas库内部调用的,而不是从脚本本身调用的。因此,如果不是
global
,就看不到该变量。
   0  1  2
0  1  2  3