更改DataFrame最后一行中的元素

时间:2014-08-06 12:26:46

标签: python pandas

我在pandas中设置了一个简单的DataFrame:

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

我希望能够改变最后一行中的单个元素。在pandas == 0.13.1中,我可以使用以下内容:

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

但在更新到pandas == 0.14.1后,我在执行此操作时收到以下警告:

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

问题当然是-1不是a的索引,所以我不能使用loc。如警告所示,我没有更改最后一行的'a'列,我只更改了丢弃的本地副本。

如何在较新版本的熊猫中执行此操作?我意识到我可以使用最后一行的索引,如:

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

但我会处理多行具有相同索引的表格,而且我不想每次都重新索引我的表格。有没有办法在不知道前一行的最后一行索引的情况下做到这一点?

3 个答案:

答案 0 :(得分:7)

好吧,我找到了一种解决这个问题的方法,无需链接,也不用担心多个索引。

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

之前我无法使用iloc因为我无法将列索引作为int提供,但get_loc解决了这个问题。感谢大家的有用评论!

答案 1 :(得分:4)

对于pandas 0.22,

a.at[a.index[-1], 'a'] = 77

这只是其中一种方式。

答案 2 :(得分:3)

从@PallavBakshi和@Mike的解决方案中获取元素,以下适用于Pandas> = 0.19

只使用iloc [-1,' a]不能作为-1工作,不在索引中。

a.loc[a.index[-1], 'a']= 4.0