2017-04-26 47 views
1

定索引假设我有两个系列:构建大熊猫数据帧从两个系列

foo = pd.Series([1,2,3]) 
bar = pd.Series([7,6,5]) 

从中我想建立一个数据帧:

tmp = pd.DataFrame() 
tmp['foo'] = foo 
tmp['bar'] = bar 

接下来,我设置了新的数据帧的指数:

tmp.index=range(1,4) 

最终,tmp以这种方式是:

foo bar 
1 1 7 
2 2 6 
3 3 5 

但是,下面的快捷键:

pd.DataFrame(
    { 
     "foo": foo, 
     "bar": bar 
    }, 
    index=range(1,4) 
) 

产生如下:

bar  foo 
1 6.0000 2.0000 
2 5.0000 3.0000 
3 nan  nan 

索引是正确的,但价值都没有。为什么它不一样?如果在创建系列时设置了foobar的索引,则第二种方法有效。

+1

大熊猫做一切与指数对齐。您的系列具有0到2的索引,因此手动组装数据框时,熊猫将根据这些值对齐系列和新索引。并且,新的数据框将从1到3,系列中的零被删除,3是NaN,并将int列转换为浮点数据类型。来自Pandas文档[数据对齐是内在的](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#intro-to-data-structures)。 –

+0

@zipa已经为您的问题提供了一个解决方案,但我仍想提醒您,在大多数Python迭代对象中,索引从0开始,而不是从1开始。因此,对于您的情况,如果将索引从(1, 4)到(0,3),这也给你正确的答案。 –

回答

5

你可以去:

pd.DataFrame(
    { 
     "foo": foo.values, 
     "bar": bar.values 
    }, 
    index=range(1,4) 
) 
+0

与@ScottBoston一起评论答案已完成。 – Dror