Numpy np.array';s aType是否阻止将来在数据帧中进行编辑?

Numpy np.array';s aType是否阻止将来在数据帧中进行编辑?,numpy,dataframe,pandas,Numpy,Dataframe,Pandas,我可以首先更改数据帧的第一个条目: In [6]: df = pd.DataFrame(np.random.rand(5,2)) In [7]: df Out[7]: 0 1 0 0.514592 0.459589 1 0.329704 0.409099 2 0.061246 0.966191 3 0.336747 0.908513 4 0.169220 0.468437 In [8]: df.ix[0][0] = 1 In [9]: d

我可以首先更改数据帧的第一个条目:

In [6]: df = pd.DataFrame(np.random.rand(5,2))
In [7]: df
Out[7]:
          0         1
0  0.514592  0.459589
1  0.329704  0.409099
2  0.061246  0.966191
3  0.336747  0.908513
4  0.169220  0.468437

In [8]: df.ix[0][0] = 1
In [9]: df
Out[9]:
          0         1
0  1.000000  0.459589
1  0.329704  0.409099
2  0.061246  0.966191
3  0.336747  0.908513
4  0.169220  0.468437
但在我这样做之后:

In [10]: df[0] = np.floor(df.index / 10).astype(int) * 10
In [11]: df
Out[11]:
   0         1
0  0  0.459589
1  0  0.409099
2  0  0.966191
3  0  0.908513
4  0  0.468437
我找不到办法改变它

In [12]: df.ix[0][0] = 1
In [13]: df
Out[13]:
   0         1
0  0  0.459589
1  0  0.409099
2  0  0.966191
3  0  0.908513
4  0  0.468437
我甚至不能更改其他列中的元素

In [16]: df.ix[0][1] = 1

In [17]: df
Out[17]:
   0         1
0  0  0.459589
1  0  0.409099
2  0  0.966191
3  0  0.908513
4  0  0.468437

这是怎么回事?

您正在编辑副本,请再试一次

In [3]: df = pd.DataFrame(np.random.rand(5,2))

In [4]: df[0] = np.floor(df.index / 10).astype(int) * 10

In [5]: df
Out[5]: 
   0         1
0  0  0.201611
1  0  0.390364
2  0  0.727422
3  0  0.941035
4  0  0.036764

In [6]: df.ix[0,1] = 1

In [7]: df
Out[7]: 
   0         1
0  0  1.000000
1  0  0.390364
2  0  0.727422
3  0  0.941035
4  0  0.036764

有趣的是,
.ix
是改变它的唯一方法吗?您知道为什么单独使用
[colname]
访问列只会得到一个副本吗?
[]
将数据帧中的行切片,请参见,colname访问是一种方便的功能,它将底层序列作为副本返回,请参见,但是为什么colname访问会使用输入8和10更改
df
,在
astype
赋值之前,如果colname access只返回一个副本,但在那之后(输入12和16)不改变
df
。嗯,这可能只是取决于numpy想做什么
。ix
将返回一个视图或副本,这取决于numpy,这实际上意味着内存中的布局是问题。在astype之前,这是一个数据类型,所以是一个内存块,所以你得到一个视图,在astype之后,一些东西被复制(通过numpy),所以你不能再得到一个视图,所以你得到一个副本,很奇怪,但它不提供“保证”。如果使用
ix[row,col]=value
语法,可以避免整个问题(或者在0.11中,
loc[row,col]
iloc[row\u number,col\u number]