Explore Courses Blog Tutorials Interview Questions
0 votes
in Data Science by (50.2k points)

I'm trying to set the entire column of a dataframe to a specific value.

In  [1]: df

Out [1]: 

     issueid   industry

0        001        xxx

1        002        xxx

2        003        xxx

3        004        xxx

4        005        xxx

From what I've seen, loc is the best practice when replacing values in a dataframe (or isn't it?):

In  [2]: df.loc[:,'industry'] = 'yyy'

However, I still received this much-talked-about warning message:

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

If I do

In  [3]: df['industry'] = 'yyy'

I got the same warning message.

Any ideas? Working with Python 3.5.2 and pandas 0.18.1.

1 Answer

0 votes
by (108k points)

To avoid these concerns altogether, just use the copy module, which explicitly forces objects to be copied in memory so that methods called on the new objects are not applied to the source object. I had the same problem as you and avoided it using the deepcopy function.

In your case, this should get rid of the warning message:

from copy import deepcopy

df = deepcopy(df_all.loc[df_all['issueid']==specific_id,:])

df['industry'] = 'yyy'

Or it can also be done without the copy module by using the Pandas copy function:

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

df['industry'] = 'yyy'

Browse Categories