使用numpy数组或列表

时间:2017-07-21 15:56:39

标签: python pandas numpy

我有一个数据框,我想根据我在循环中进行的一些计算来迭代更改某些行的值。

例如:如果满足条件,那么我想更改中心,即我的数据帧的行中的值。

这是我的中心:

       centers=[np.array([ 4.73478261,  3.10869565,  1.44782609, 0.20434783]),
       np.array([ 5.        ,  2.4       ,  3.2       ,  1.03333333]),
       np.array([ 5.135,  3.555,  1.48 ,  0.275]),
       np.array([ 5.52857143,  4.04285714,  1.47142857,  0.28571429]),
      np.array([ 5.596,  2.664,  4.052,  1.252]),
      np.array([ 6.01176471,  2.71176471,  4.94705882,  1.79411765]),
      np.array([ 6.4       ,  2.97058824,  4.55294118,  1.41176471]),
      np.array([ 6.49090909,  2.9       ,  5.37272727,  1.8       ]),
      np.array([ 6.61333333,  3.16      ,  5.56666667,  2.28666667]),
      np.array([ 7.475,  3.125,  6.3  ,  2.05 ])]

然后我将它们转换为数据框

    centersDf = pd.DataFrame(centers)
    centersDf

我想做点什么,

    centersDf[i]=np.array[5,  1,  0  ,  2 ]

这不起作用,但可能是等价的吗? 所以,我在循环中重新计算中心,我想更新我的数据帧。

2 个答案:

答案 0 :(得分:1)

centersDf = pd.DataFrame(centers)
centersDf.head()
   0         1         2         3       
0  4.734783  3.108696  1.447826  0.204348
1  5.000000  2.400000  3.200000  1.033333
2  5.135000  3.555000  1.480000  0.275000
3  5.528571  4.042857  1.471429  0.285714
4  5.596000  2.664000  4.052000  1.252000

centersDf.iloc[0] = np.array([5,  1,  0  ,  2 ])
centersDf.head()
   0         1         2         3       
0  5.000000  1.000000  0.000000  2.000000
1  5.000000  2.400000  3.200000  1.033333
2  5.135000  3.555000  1.480000  0.275000
3  5.528571  4.042857  1.471429  0.285714
4  5.596000  2.664000  4.052000  1.252000

答案 1 :(得分:0)

当您将标量值传递给__getitem__方法(使用[]pandas时,会根据列名进行计算。因此centersDf[0]0列。你得到一个错误,因为你试图将一个长度为4的数组分配给一个长度为10的列,这是没有意义的。

如果您希望能够按列名称分配,请创建数据帧,因为它的转置

centersDf = pd.DataFrame(centers).T

然后

centersDf[0] = [5,  1,  0 ,  2]

工作正常

centersDf

   0         1      2         3      4         5         6         7         8      9
0  5  5.000000  5.135  5.528571  5.596  6.011765  6.400000  6.490909  6.613333  7.475
1  1  2.400000  3.555  4.042857  2.664  2.711765  2.970588  2.900000  3.160000  3.125
2  0  3.200000  1.480  1.471429  4.052  4.947059  4.552941  5.372727  5.566667  6.300
3  2  1.033333  0.275  0.285714  1.252  1.794118  1.411765  1.800000  2.286667  2.050

否则,只需使用已经建议的loc