如何在Python中的函数中过滤数据?

时间:2018-03-19 13:31:29

标签: python pandas

我有一个数据帧(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而不是

有人请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

问题是您在函数内使用的df变量是对数据帧的引用。因此,当您使用赋值运算符时,它会重新分配表中的值,从而导致冲突 您可以通过复制原始数据框然后将df变量引用到它来解决此问题 例如:df = df[df['NEW'].isin(LF)].copy()