首页 > 解决方案 > Pandas - 用于设置值的 reindex 与 loc 的行为/问题

问题描述

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

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

考虑以下情况:

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错误消息。

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

标签: python-3.xpandas

解决方案


@coldspeed 的快速回答是最简单的,尽管警告的行为具有误导性。所以在没有reindex的时候返回一个副本。loc来自熊猫文档:

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

所以说reindex是根据警告的替代方法loc实际上是误导性的。

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


推荐阅读