熊猫-重新设置索引的行为/问题与设置值的位置

时间:2019-03-11 17:39:25

标签: python-3.x pandas

从0.24开始,我一直尝试在熊猫中使用reindex而不是loc,这是关于使用列表重新索引的警告。

我遇到的问题是我使用loc来更改数据框的值。
现在,如果使用reindex,我会失去它,如果我尝试变得聪明,我什至会得到一个错误。

考虑以下情况:

df = pd.DataFrame(data=pd.np.zeros(4, 2), columns=['a', 'b'])
ds = pd.Series(data=[1]*3)

我想更改值的子集(同时保留其他值),因此df保持不变。

这是有效的原始行为(并将df ['a']子集中的值更改为1)

df.loc[range(3), 'a'] = ds

但是当我使用重新索引时,我什么都无法更改:

df.reindex(range(3)).loc['a'] = ds

现在,当我尝试是这样的:

df.loc[:, 'a'].reindex(range(3)) = ds

我收到一条SyntaxError: can't assign to function call错误消息。

作为参考,我使用的是熊猫0.24和python 3.6.8

1 个答案:

答案 0 :(得分:0)

@coldspeed的快速答案是最简单的,尽管警告的行为具有误导性。 因此,reindex不会返回loc的副本。 从熊猫文档中:

  

除非新索引等于当前索引并且copy = False,否则将生成一个新对象。

所以说reindexloc的替代,因为警告实际上是误导的。

希望这可以帮助面临相同情况的人们。