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

时间:2019-05-23 06:25:01

标签: python pandas

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

我的代码:

def  merge_preprp(x):
     x[x.columns[0]] = x[x.columns[0]].astype(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]].astype(int)
     x.sort_values(x.columns[0], inplace = True)
     x.drop_duplicates(subset = x.columns[0], keep = 'last',inplace = True)
     return x

# dataframes A, B, C

list1 = [A,B,C]
for i in list1:
    i =merge_preprp(i)

1 个答案:

答案 0 :(得分:1)

如果调用DataFrames列表的函数,则该函数就位不起作用,因为在您的函数中是组合就位函数,也没有就位函数,但是需要在循环中将输出分配给新的DataFrames列表:

list1 = [A,B,C]
out = []
for i in list1:
    out.append(merge_preprp(i))

或在列表理解中:

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

如果在函数中仅执行最后两行之类的就地操作,以进行排序并删除重复项,则您的解决方案将按需要工作。