Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change an element in the last row of a DataFrame

Tags:

I set up a simple DataFrame in pandas:

a = pandas.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['a','b','c']) >>> print a    a  b  c 0  1  2  3 1  4  5  6 2  7  8  9 

I would like to be able to alter a single element in the last row of. In pandas==0.13.1 I could use the following:

a.iloc[-1]['a'] = 77 >>> print a     a  b  c 0   1  2  3 1   4  5  6 2  77  8  9 

but after updating to pandas==0.14.1, I get the following warning when doing this:

SettingWithCopyWarning: 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 

The problem of course being that -1 is not an index of a, so I can't use loc. As the warning indicates, I have not changed column 'a' of the last row, I've only altered a discarded local copy.

How do I do this in the newer version of pandas? I realize I could use the index of the last row like:

a.loc[2,'a'] = 77 

But I'll be working with tables where multiple rows have the same index, and I don't want to reindex my table every time. Is there a way to do this without knowing the index of the last row before hand?

like image 304
Mike Avatar asked Aug 06 '14 12:08

Mike


1 Answers

Alright I've found a way to solve this problem without chaining, and without worrying about multiple indices.

a.iloc[-1, a.columns.get_loc('a')] = 77 >>> a    a  b  c 0  1  2  3 1  4  5  6 2 77  8  9 

I wasn't able to use iloc before because I couldn't supply the column index as an int, but get_loc solves that problem. Thanks for the helpful comments everyone!

like image 184
Mike Avatar answered Sep 29 '22 09:09

Mike