Python 使用setitem时未引发异常

Python 使用setitem时未引发异常,python,python-2.7,pandas,Python,Python 2.7,Pandas,下面是一段让我惊讶(和困扰)的代码的最小、完整和可验证的示例: 因此,当我使用iloc[0,0]调用setitem时,不会引发异常,但不会设置任何内容。 当我使用iloc[0,0]调用getitem时,会引发异常。这在我看来相当不一致。我希望getitem和setitem都会引发异常,或者两者都会在数据帧中返回标量。正如您所知,df['a']是一个系列,因为 使用[](又称“getitem”)索引这些项目的主要功能 熟悉在Python中实现类行为)的人选择了 低维切片 所以没有专栏。您不能使用

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

因此,当我使用
iloc[0,0]
调用setitem时,不会引发异常,但不会设置任何内容。
当我使用
iloc[0,0]
调用
getitem
时,会引发异常。这在我看来相当不一致。我希望
getitem
setitem
都会引发异常,或者两者都会在数据帧中返回标量。

正如您所知,
df['a']
是一个系列,因为

使用[](又称“getitem”)索引这些项目的主要功能 熟悉在Python中实现类行为)的人选择了 低维切片

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

关于
df['a'].iloc[0,0]=10
的任何例外,这是有意的

很难预测它将返回一个视图还是一个副本(它) 取决于阵列的内存布局,pandas对此不做任何说明 (担保)

仅供参考,如果您想更改df(0,0)的值,您应该尝试这种方法

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

即使使用
x=df['a'].iloc;x[0,0]=10;打印(x[0,0])
会给出相同的错误!这可能需要知道如何查看装配的人。
df.iloc[0, 0] = 10 
df.ix[0, 'a'] = 10 
df.loc[0, 'a'] = 10