我一直在玩熊猫索引,偶然发现了一些非常奇怪的东西。我试图将一个数据帧的多行分配给另一个数据帧。分配一行有效,但分配多行则不然。以下是一些可重现的数据。我生成了两个数据帧。
centers=pd.DataFrame(np.nan, index=list(string.ascii_uppercase[:3]), columns=['x','y'])
data=pd.DataFrame(np.random.randn(50,2), index=range(50), columns=['x','y'])
中心是一个空的数据框,我想制作前三行的中心'等于前三行数据'。
centers
x y
A NaN NaN
B NaN NaN
C NaN NaN
data.head()
x y
0 1.195444 0.666973
1 -0.933807 -0.382923
2 0.582849 0.533059
3 -0.411232 -1.142588
4 0.144402 -0.991504
最初,我认为这是一个索引问题,因为中心有字母和数据有数字。但是我不再认为是这种情况,因为一次索引一行会给我想要的结果。这是零指数,这里是一个既有预期结果的指数。
centers.iloc[0,:]=data.ix[0,['x','y']]
centers
x y
A 1.195444 0.666973
B NaN NaN
C NaN NaN
centers.iloc[1,:]=data.ix[1,['x','y']]
centers
x y
A 1.195444 0.666973
B -0.933807 -0.382923
C NaN NaN
但是,使用多行执行此操作不会。
centers.iloc[0:3,:]=data.ix[0:2,['x','y']]
centers
x y
A NaN NaN
B NaN NaN
C NaN NaN
每个数据框都是我认为的。
centers.iloc[0:3,:]
x y
A NaN NaN
B NaN NaN
C NaN NaN
data.ix[0:2,['x','y']]
x y
0 1.195444 0.666973
1 -0.933807 -0.382923
2 0.582849 0.533059
为什么会出现这种情况,我该如何解决? (我知道我可以通过设置等于我的数据索引的中心来解决这个问题,但我想要一个带索引的答案)
答案 0 :(得分:1)
问题是索引不匹配因此如果您致电.values
以返回np.array
然后它可以正常工作,则不会发生任何分配:
In [76]:
print(centers.iloc[0:3,:])
print(data.ix[0:2,['x','y']])
x y
A NaN NaN
B NaN NaN
C NaN NaN
x y
0 -1.081909 -0.672130
1 -0.144562 0.863694
2 0.214779 1.193998
In [77]:
centers.iloc[0:3,:] = data.ix[0:2,['x','y']].values
centers
Out[77]:
x y
A -1.081909 -0.672130
B -0.144562 0.863694
C 0.214779 1.193998
所以你所观察到的不是错误,而是设计