我有一个数据框,我想根据我在循环中进行的一些计算来迭代更改某些行的值。
例如:如果满足条件,那么我想更改中心,即我的数据帧的行中的值。
这是我的中心:
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 ]
这不起作用,但可能是等价的吗? 所以,我在循环中重新计算中心,我想更新我的数据帧。
答案 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
。