【发布时间】:2020-04-27 15:20:44
【问题描述】:
我有以下数据框:
df3.head()
2005-02-23 NaN NaN
2005-02-24 0.888447 2.260956
2005-03-24 -1.616620 NaN
2005-04-12 NaN NaN
2005-04-28 0.233408 -2.340463
如果我运行以下几行:
df4 = df3.dropna(thresh=2).rename(columns={'a': 'x', 'b': 'y'})
df4['c'] = 1
代码在没有警告的情况下执行。但是,如果我改为运行以下行:
df4 = df3.dropna(thresh=2) #.rename(columns={'a': 'x', 'b': 'y'})
df4['c'] = 1
我收到警告消息:
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
这是怎么回事?
我可以按照它的建议通过使用loc 来消除警告:
df4 = df3.dropna(thresh=2) #.rename(columns={'a': 'x', 'b': 'y'})
df4.loc[:, 'c'] = 1
但是,这个解决方案很棘手,因为参考列 c
在使用 loc 时不存在。
熊猫版本:0.23.4
【问题讨论】:
-
对内部 pandas 的了解不足以解释,该警告只是想警告您
df4['c'] = 1有时会设置在 df 的副本上,当您的 df 仍然有 #NA 时,这总是向我显示我认为,对于这种情况,我认为它仍然会成功地做你想做的事 -
我无法使用 pandas 0.25.3 版重现此问题,此处没有警告