将值设置为熊猫数据框的整个列

新手上路,请多包涵

我正在尝试将数据框的整个列设置为特定值。

 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 许可协议

阅读 217
2 个回答

当从现有对象定义新对象时,Python 会做出意想不到的事情。您在上面的评论中指出,您的数据框是按照 df = df_all.loc[df_all['issueid']==specific_id,:] 行定义的。在这种情况下, df 实际上只是存储在 df_all 对象中的行的替代:一个新对象不是在内存中创建的。

为了完全避免这些问题,我经常不得不提醒自己使用 copy 模块,它显式强制将对象复制到内存中,这样在新对象上调用的方法就不会应用于源对象。我和你有同样的问题,并使用 deepcopy 函数避免了它。

在您的情况下,这应该消除警告消息:

 from copy import deepcopy
df = deepcopy(df_all.loc[df_all['issueid']==specific_id,:])
df['industry'] = 'yyy'


编辑:另请参阅下面 David M. 的精彩评论!

 df = df_all.loc[df_all['issueid']==specific_id,:].copy()
df['industry'] = 'yyy'

原文由 Alex P. Miller 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 assign 函数:

 df = df.assign(industry='yyy')

原文由 Mina HE 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题