当前位置: 首页 > 面试题库 >

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

司马昕
2023-03-14
问题内容

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

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。


问题答案:

从现有对象定义新对象时,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'


 类似资料: