gpt4 book ai didi

python - 为什么 pandas 按位置索引子集会出错?

转载 作者:行者123 更新时间:2023-12-01 06:36:03 27 4
gpt4 key购买 nike

我正在阅读韦斯·麦金尼 (Wes Mckinney) 写的关于 Pandas 的书,偶然发现了这个例子。

people = DataFrame(np.random.randn(5, 5),
columns=['a', 'b', 'c', 'd', 'e'],
index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])

如果我们想修改数据框,我们必须运行以下命令

people.loc[2:3, ['b', 'c']] = np.nan

基于标签索引并避免SettingWithCopyWarning。该命令完美运行,数据帧也相应更改。
我的问题是,为什么如果我运行下面的代码(与上面相同的代码,但没有为子集分配值),我会收到索引错误?我知道 .loc 是标签索引,我们不应该使用 2:3,但为什么我在分配值时不会出现错误?

people.loc[2:3, ['b', 'c']]

结果:

TypeError: cannot do slice indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [2] of <class 'int'>

最佳答案

可行的答案是,通过方括号赋值是在__setitem__中实现的,通过方括号提取数据是在__getitem__中实现的,这是不同的代码路径。您发现的行为可能是无意的。

我怀疑这个问题是由于 loc[]iloc[] 是为了替换 ix[] 而创建的。 ,它明确允许按整数位置(如 iloc[])和索引值(如 loc[])混合索引,这种行为是一种极端情况这揭示了早期 API 的痕迹。

我建议不要依赖它,因为它没有记录,可能是无意的,并且可能会在未来的版本中发生变化。

关于python - 为什么 pandas 按位置索引子集会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59664772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com