gpt4 book ai didi

python - 使用 setitem 时 Pandas 不会抛出异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:23 25 4
gpt4 key购买 nike

这是一段让我感到惊讶(和困扰)的代码的最小、完整且可验证的示例:

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2], [3,4]], columns = ['a','b'])
>>> df['a'].iloc[0,0] = 10 # df has not changed, and no exception is thrown
>>> df
a b
0 1 2
1 3 4
>>> df['a'].iloc[0,0] # this throws an exception
IndexingError Traceback (most recent call last)

因此,当我使用 iloc[0,0] 调用 setitem 时,不会引发异常,但不会设置任何内容。当我用 iloc[0,0] 调用 getitem 时,会引发异常。这对我来说似乎相当不一致。我本以为 getitemsetitem 都会引发异常,或者两者都会返回数据框中的标量。

最佳答案

您可能知道,df['a'] 是一个系列,因为,

the primary function of indexing with [] (a.k.a. getitem for those familiar with implementing class behavior in Python) is selecting out lower-dimensional slices.

Basics

所以没有专栏。您不能使用 .iloc[0, Fail!] 因此 df['a'].iloc[0, 0] 异常是正常的。

关于 df['a'].iloc[0, 0] = 10 无一异常(exception),这是有意的。

it's very hard to predict whether it will return a view or a copy (it depends on the memory layout of the array, about which pandas makes no guarantees)

Returning a view versus a copy

Why does assignment fail when using chained indexing?

仅供引用,如果你想改变 df (0, 0) 的值,你应该尝试这种方式。

df.iloc[0, 0] = 10 
df.ix[0, 'a'] = 10
df.loc[0, 'a'] = 10

关于python - 使用 setitem 时 Pandas 不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36079255/

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