我正在尝试将数据框的整个列设置为特定值。
In [1]: df
Out [1]:
issueid industry
0 001 xxx
1 002 xxx
2 003 xxx
3 004 xxx
4 005 xxx
据我所知, loc
是替换数据框中的值的最佳实践(或者不是吗?):
In [2]: df.loc[:,'industry'] = 'yyy'
然而,我还是收到了这条备受关注的警告信息:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
如果我做
In [3]: df['industry'] = 'yyy'
我收到了同样的警告信息。
有任何想法吗?使用 Python 3.5.2 和 pandas 0.18.1。
原文由 Jingwei Yu 发布,翻译遵循 CC BY-SA 4.0 许可协议
当从现有对象定义新对象时,Python 会做出意想不到的事情。您在上面的评论中指出,您的数据框是按照
df = df_all.loc[df_all['issueid']==specific_id,:]
行定义的。在这种情况下,df
实际上只是存储在df_all
对象中的行的替代:一个新对象不是在内存中创建的。为了完全避免这些问题,我经常不得不提醒自己使用
copy
模块,它显式强制将对象复制到内存中,这样在新对象上调用的方法就不会应用于源对象。我和你有同样的问题,并使用deepcopy
函数避免了它。在您的情况下,这应该消除警告消息:
编辑:另请参阅下面 David M. 的精彩评论!