python:pandas.dataframe.values没有改变

时间:2014-05-09 01:38:16

标签: python pandas

我在pandas数据帧中发现了奇怪的值赋值限制。这是一个简单的插图

   from __future__ import print_function
   from pandas import DataFrame 
   import numpy as np

   data=DataFrame({'one':[1,2],'two':[3.0,4]})
   data.values[1,1]=data.values[1,1]*6 # these are type<numpyfloat64>
   print(data.values[1,1])
   #still returns 4.0 instead of expected 24.0

我很感激为什么会发生这种情况的解释。

3 个答案:

答案 0 :(得分:4)

当您访问values对象的NDFrame属性时,会在其类型中收到同类的数组。也就是说,values会返回 dtype的数组,这是dtypeDataFrame列中最大的精度。在您的情况下,oneint64 dtype,而twofloat64。当您调用values时,最终会发生concatenate样式操作,并且这些操作始终会返回副本,这就是您无法分配并查看数据中的副作用的原因。

答案 1 :(得分:0)

data.values是一个单独的数组,而不是对原始对象的引用。它只是从data读取数据。是的,它不会改变原始值,因为它不代表它们,它基本上是它们的副本。

要直接更改值,请使用loc

data.loc[1, 'one'] *= 6

答案 2 :(得分:0)

根据the documentation of Pandas

  

与轴标签不同,值属性本身无法分配给。

因此这是预期的行为。以下代码是一种更改值的方法。

data.two[1] = data.two[1] * 6