np.array的astype是否会阻止DataFrames中的未来编辑?

时间:2013-03-21 21:44:47

标签: numpy dataframe pandas

我最初可以更改DataFrame的第一个条目:

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

这是怎么回事?

1 个答案:

答案 0 :(得分:2)

您正在编辑副本,请尝试

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