我正在使用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