Python 通过for循环在多个数据帧上运行函数

Python 通过for循环在多个数据帧上运行函数,python,pandas,Python,Pandas,我有一个对每个数据帧执行标准预处理的函数。我通过for循环将4个数据帧作为列表传递给该函数。 但是在函数中执行的更改不会反映在实际的数据帧中。为什么? 我的代码: def merge_prepp(x): x[x.columns[0]]=x[x.columns[0]].aType(str) x[x.columns[0]]=x[x.columns[0]].str.extract(“(\d+”) x=x[pd.notnull(x[x.columns[0]])] x=x[x[x.columns[0]].

我有一个对每个数据帧执行标准预处理的函数。我通过for循环将4个数据帧作为列表传递给该函数。 但是在函数中执行的更改不会反映在实际的数据帧中。为什么?

我的代码:

def merge_prepp(x):
x[x.columns[0]]=x[x.columns[0]].aType(str)
x[x.columns[0]]=x[x.columns[0]].str.extract(“(\d+”)
x=x[pd.notnull(x[x.columns[0]])]
x=x[x[x.columns[0]].apply(lambda x:x.isnumeric())]
x[x.columns[0]]=x[x.columns[0]].aType(int)
x、 排序_值(x.columns[0],inplace=True)
x、 删除重复项(子集=x.columns[0],保留=last',inplace=True)
返回x
#数据帧A、B、C
列表1=[A,B,C]
对于清单1中的i:
i=合并预处理(i)

如果为数据帧列表调用函数,则它不会在原地工作,因为在您的函数中有组合原地和非原地函数,但需要将输出分配给循环中的新数据帧列表:

list1 = [A,B,C]
out = []
for i in list1:
    out.append(merge_preprp(i))
或在列表理解中:

out = [merge_preprp(i) for i in list1]


如果在您的函数中,只有像最后两行一样的就地操作用于排序和删除重复项,那么您的解决方案将按照您的需要工作。

如何从out列表中获取数据帧?您可以通过像
out[0]
out[1]