Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correct way to set value on a slice in pandas [duplicate]

I have a pandas dataframe: data. it has columns ["name", 'A', 'B']

What I want to do (and works) is:

d2 = data[data['name'] == 'fred'] #This gives me multiple rows d2['A'] = 0 

This will set the column A on the fred rows to 0. I've also done:

indexes = d2.index data['A'][indexes] = 0 

However, both give me the same warning:

/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/core/indexing.py:128: SettingWithCopyWarning:  A value is trying to be set on a copy of a slice from a DataFrame  See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 

How does pandas WANT me to do this?

like image 945
Brian Postow Avatar asked Jun 15 '16 17:06

Brian Postow


People also ask

How do I slice data in Pandas DataFrame?

To slice the columns, the syntax is df. loc[:,start:stop:step] ; where start is the name of the first column to take, stop is the name of the last column to take, and step as the number of indices to advance after each extraction; for example, you can select alternate columns.


1 Answers

This is a very common warning from pandas. It means you are writing in a copy slice, not the original data so it might not apply to the original columns due to confusing chained assignment. Please read this post. It has detailed discussion on this SettingWithCopyWarning. In your case I think you can try

data.loc[data['name'] == 'fred', 'A'] = 0 
like image 77
Andreas Hsieh Avatar answered Oct 03 '22 21:10

Andreas Hsieh