我有一个数据帧(raw_file):
NAME ABCD XYZ
abc 1 111
def 254 121
ghi 8976541 254
jkl 000000111/1215 111
mno 15614987 117
我正在编写一个函数,根据某些计算创建一个新变量,并根据此条件过滤数据:
Len_Filter = [1,2,3,4,14]
到目前为止的功能是:
def Acc(df,AN,TR,LF):
df[AN]=df[AN].astype(str)
df[TR]=df[TR].astype(str)
df['NEW'] = df[AN].str.len()
df = df[df['NEW'].isin(LF)] #ERROR
df[AN] = "0000" + df[TR] + "/" + df[AN]
函数调用是:
Acc(raw_file,'ABCD','XYZ',Len_Filter)
虽然以下代码在函数外部起作用,但
raw_file = raw_file[raw_file['NEW'].isin(Len_Filter)]
我在函数中使用它时收到以下警告:
正在尝试在DataFrame的切片副本上设置值。 尝试使用.loc [row_indexer,col_indexer] = value而不是
有人请帮我解决这个问题。
答案 0 :(得分:0)
问题是您在函数内使用的df
变量是对数据帧的引用。因此,当您使用赋值运算符时,它会重新分配表中的值,从而导致冲突
您可以通过复制原始数据框然后将df
变量引用到它来解决此问题
例如:df = df[df['NEW'].isin(LF)].copy()