从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
答案 0 :(得分:0)
@coldspeed的快速答案是最简单的,尽管警告的行为具有误导性。
因此,reindex
不会返回loc
的副本。
从熊猫文档中:
除非新索引等于当前索引并且copy = False,否则将生成一个新对象。
所以说reindex
是loc
的替代,因为警告实际上是误导的。
希望这可以帮助面临相同情况的人们。