我具有对每个数据帧执行标准预处理的功能。我通过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)
答案 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]
如果在函数中仅执行最后两行之类的就地操作,以进行排序并删除重复项,则您的解决方案将按需要工作。