Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace value for a selected cell in pandas DataFrame without using index

this is a rather similar question to this question but with one key difference: I'm selecting the data I want to change not by its index but by some criteria.

If the criteria I apply return a single row, I'd expect to be able to set the value of a certain column in that row in an easy way, but my first attempt doesn't work:

>>> d = pd.DataFrame({'year':[2008,2008,2008,2008,2009,2009,2009,2009],  ...                   'flavour':['strawberry','strawberry','banana','banana', ...                   'strawberry','strawberry','banana','banana'], ...                   'day':['sat','sun','sat','sun','sat','sun','sat','sun'], ...                   'sales':[10,12,22,23,11,13,23,24]})  >>> d    day     flavour  sales  year 0  sat  strawberry     10  2008 1  sun  strawberry     12  2008 2  sat      banana     22  2008 3  sun      banana     23  2008 4  sat  strawberry     11  2009 5  sun  strawberry     13  2009 6  sat      banana     23  2009 7  sun      banana     24  2009  >>> d[d.sales==24]    day flavour  sales  year 7  sun  banana     24  2009  >>> d[d.sales==24].sales = 100 >>> d    day     flavour  sales  year 0  sat  strawberry     10  2008 1  sun  strawberry     12  2008 2  sat      banana     22  2008 3  sun      banana     23  2008 4  sat  strawberry     11  2009 5  sun  strawberry     13  2009 6  sat      banana     23  2009 7  sun      banana     24  2009 

So rather than setting 2009 Sunday's Banana sales to 100, nothing happens! What's the nicest way to do this? Ideally the solution should use the row number, as you normally don't know that in advance!

like image 807
LondonRob Avatar asked Jul 18 '13 17:07

LondonRob


People also ask

How do I change the value of a specific cell in pandas DataFrame?

You can set cell value of pandas dataframe using df.at[row_label, column_label] = 'Cell Value'. It is the fastest method to set the value of the cell of the pandas dataframe.

How do you get the value of a data frame without an index?

to_string() to Print DataFrame without Index. You can use DataFrame. to_string(index=False) on the DataFrame object to print.

How can I replace multiple values with one value in pandas?

Pandas replace multiple values in column replace. By using DataFrame. replace() method we will replace multiple values with multiple new strings or text for an individual DataFrame column. This method searches the entire Pandas DataFrame and replaces every specified value.


1 Answers

Many ways to do that

1

In [7]: d.sales[d.sales==24] = 100  In [8]: d Out[8]:     day     flavour  sales  year 0  sat  strawberry     10  2008 1  sun  strawberry     12  2008 2  sat      banana     22  2008 3  sun      banana     23  2008 4  sat  strawberry     11  2009 5  sun  strawberry     13  2009 6  sat      banana     23  2009 7  sun      banana    100  2009 

2

In [26]: d.loc[d.sales == 12, 'sales'] = 99  In [27]: d Out[27]:     day     flavour  sales  year 0  sat  strawberry     10  2008 1  sun  strawberry     99  2008 2  sat      banana     22  2008 3  sun      banana     23  2008 4  sat  strawberry     11  2009 5  sun  strawberry     13  2009 6  sat      banana     23  2009 7  sun      banana    100  2009 

3

In [28]: d.sales = d.sales.replace(23, 24)  In [29]: d Out[29]:     day     flavour  sales  year 0  sat  strawberry     10  2008 1  sun  strawberry     99  2008 2  sat      banana     22  2008 3  sun      banana     24  2008 4  sat  strawberry     11  2009 5  sun  strawberry     13  2009 6  sat      banana     24  2009 7  sun      banana    100  2009 
like image 119
waitingkuo Avatar answered Oct 06 '22 09:10

waitingkuo