我希望查询返回一个视图,以便我可以修改字段而不会产生此错误。
SettingWithCopyWarning:试图在一个副本上设置一个值 从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] = 值代替
请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
我有一个多行(长)查询q
,在这里我将其缩写为:
df1 = pd.Dataframe(...)
q = "tcpstream==1 and ipsrc=='10.0.0.1' and sport==5201"
df = df1.query(q)
df['dest'] = "toto" # <--- this generates the warning/error
显然我可以执行df1.update(df),但似乎很浪费,我正在寻找更有效的方法。
答案 0 :(得分:1)
pd.DataFrame.query
设计用于查询,而不是设置值。如果要将字符串查询用作掩码,则可以计算索引并将其输入pd.DataFrame.loc
:
df.loc[df.query(q).index, 'dest'] = 'toto'