dataframe.loc []导致链式索引

时间:2016-06-20 12:34:29

标签: python pandas dataframe

我正在使用pandas 0.18.0。 如果我通过使用.loc []过滤现有数据框来创建新数据框,然后尝试向新数据框添加新列,则会收到链式索引警告。

我很困惑因为我认为使用.loc的全部意义是避免链式索引。

我错过了什么,或者这是一个错误?

newdf = df.loc[some_condition]是否创建了一个newdf作为原始视图而不是副本的解释?

我发现摆脱警告的唯一方法是使用copy.deepcopy:

newdf = copy.deepcopy( df.loc[ (df['a'] > 10)  | ( df['b'] > 10) , :] )

还有其他办法吗?

例如:

import numpy as np
import pandas as pd
import copy

df=pd.DataFrame()
df['a']=np.arange(0,100)
df['b'] = np.arange(0,100) * 2

newdf = df.loc[ (df['a'] > 10) | ( df['b'] > 10) , :]
newdf['x'] = 0

生成此警告:

  

SettingWithCopyWarning:尝试在a的副本上设置值   从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] =   代替值

     

请参阅文档中的警告:   http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy   newdf [' x'] = 0

0 个答案:

没有答案