Python 试图在数据帧的切片副本上设置值。-熊猫

Python 试图在数据帧的切片副本上设置值。-熊猫,python,pandas,dataframe,Python,Pandas,Dataframe,我是新来的pandas,并且,给定一个数据帧,我试图删除一些不满足特定要求的列。研究如何做到这一点,我得到了以下结构: df = df.loc[df['DS_FAMILIA_PROD'].isin(['CARTOES', 'CARTÕES'])] 但是,在处理帧时,出现以下错误: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] =

我是新来的
pandas
,并且,给定一个数据帧,我试图删除一些不满足特定要求的列。研究如何做到这一点,我得到了以下结构:

df = df.loc[df['DS_FAMILIA_PROD'].isin(['CARTOES', 'CARTÕES'])]
但是,在处理帧时,出现以下错误:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self[name] = value
我不确定该做什么,因为我已经在使用
.loc
功能。 我错过了什么

f = ['ID_manifest', 'issue_date', 'channel', 'product', 'ID_client', 'desc_manifest']

df = pd.DataFrame(columns=f)
for chunk in df2017_chunks:
    aux = preProcess(chunk, f)
    df = pd.concat([df, aux])

def preProcess(df, f):    
    stops = list(stopwords.words("portuguese"))
    stops.extend(['reclama', 'cliente', 'santander', 'cartao', 'cartão'])

    df = df.loc[df['DS_FAMILIA_PROD'].isin(['CARTOES', 'CARTÕES'])]

    df.columns = f
    df.desc_manifest = df.desc_manifest.str.lower() # All lower case
    df.desc_manifest = df.desc_manifest.apply(lambda x: re.sub('[^A-zÀ-ÿ]', ' ', str(x))) # Just letters
    df.replace(['NaN', 'nan'], np.nan, inplace = True) # Remone nan
    df.dropna(subset=['desc_manifest'], inplace=True)
    df.desc_manifest = df.desc_manifest.apply(lambda x: [word for word in str(x).split() if word not in stops]) # Remove stop words

    return df

警告的目的是向用户显示,他们可能正在对副本而不是原件进行操作,但可能存在误报。正如评论中提到的,这不是您用例的问题

您只需关闭对数据帧的检查:

df.is_copy = False
或者,您可以显式复制:

df = df.loc[df['DS_FAMILIA_PROD'].isin(['CARTOES', 'CARTÕES'])].copy()
您需要,因为如果您稍后修改
df
中的值,您将发现修改不会传播回原始数据(
df
),并且不会发出警告

loc
可以省略,但是没有
复制的警告也可以省略


您的代码似乎还可以,但我认为问题出在前面-check不会基于列的值删除行,而不是删除列?
df = df.loc[df['DS_FAMILIA_PROD'].isin(['CARTOES', 'CARTÕES'])].copy()
df = pd.DataFrame({'DS_FAMILIA_PROD':['a','d','b'],
                   'desc_manifest':['F','rR', 'H'],
                   'C':[7,8,9]})

def preProcess(df):    
    df = df[df['DS_FAMILIA_PROD'].isin([u'a', u'b'])].copy()
    df.desc_manifest = df.desc_manifest.str.lower() # All
    ...
    ...
    return df


print (preProcess(df))
   C DS_FAMILIA_PROD desc_manifest
0  7               a             f
2  9               b             h