为什么不能从Python中的apply函数内部访问其他变量?

tso*_*tsi 1 python pandas

为什么以下代码不会影响OutputDataFrame?(这个例子本身并不有趣 - 它是一种'复制'DataFrame的复杂方式.)

def getRow(row):
     Output.append(row)

Output = pd.DataFrame()
Input = pd.read_csv('Input.csv')
Input.apply(getRow)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得使用该apply功能的功能,以便影响其他变量?

Mik*_*ler 5

怎么了

DataFrame.append()返回一个新的数据帧.它不会修改Output,而是每次创建一个新的.

   DataFrame.append(self, other, ignore_index=False, verify_integrity=False)
Run Code Online (Sandbox Code Playgroud)

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

这里:

Output.append(row)
Run Code Online (Sandbox Code Playgroud)

你创建一个新的数据帧,但立即扔掉它.

您有权访问 - 但您不应该以这种方式使用它

虽然这有效,但我强烈建议不要使用global:

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

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

df.apply(get_row)
print(df2)
Run Code Online (Sandbox Code Playgroud)

输出:

   0  1  2
0  1  2  3
Run Code Online (Sandbox Code Playgroud)

把它作为示范会发生什么.不要在代码中使用它.