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