python-3.x - 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
解决方案
@coldspeed 的快速回答是最简单的,尽管警告的行为具有误导性。所以在没有reindex
的时候返回一个副本。loc
来自熊猫文档:
除非新索引等同于当前索引并且 copy=False,否则会生成一个新对象。
所以说reindex
是根据警告的替代方法loc
实际上是误导性的。
希望这可以帮助面临同样情况的人。
推荐阅读
- java - 带有 MultiValueMap 的 Spring Cloud Feign 版本 2020.04 问题
- excel - 对一个单元格内的多个换行符分隔行应用 VLOOKUP
- drake - p_WC 与 p_WCa 和 p_WCb
- sorting - 对象c ++的排序向量引发C2280错误
- octave - 如何在八度音阶中的其他文件夹中使用脚本文件的函数?
- java - RXJava2 - 如何使可流动的可完成
- python - 如何在没有类的情况下在 python selenium 上获取跨度值
- ios - Swift:如何正确设置 BarButtonItem Image
- flutter - 如何解决此错误:LateInitializationError: Field 'weatherInfo' has not been initialized?
- python - 如何在 Python 中将数组存储在磁盘上,以便在不加载整个文件的情况下访问特定元素?