python pandas奇怪的索引多行而不是一行

时间:2016-05-19 09:17:34

标签: python pandas indexing dataframe

我一直在玩熊猫索引,偶然发现了一些非常奇怪的东西。我试图将一个数据帧的多行分配给另一个数据帧。分配一行有效,但分配多行则不然。以下是一些可重现的数据。我生成了两个数据帧。

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

为什么会出现这种情况,我该如何解决? (我知道我可以通过设置等于我的数据索引的中心来解决这个问题,但我想要一个带索引的答案)

1 个答案:

答案 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

所以你所观察到的不是错误,而是设计