连接两个Pandas系列时,值的顺序会发生变化

时间:2015-04-24 05:13:24

标签: python numpy pandas scipy

我有一个feature_reduced列表,如下所示:

Index([u'NY.GDP.DEFL.KD.ZG.1', u'NY.GDP.PCAP.KD.ZG', u'NY.GDP.DEFL.KD.ZG', u'NE.IMP.GNFS.ZS', u'NY.GDP.DISC.CN', u'FS.AST.PRVT.GD.ZS', u'FS.AST.DOMS.GD.ZS', u'NY.GDS.TOTL.ZS', u'NY.GDP.DISC.KN', u'NY.GDP.NGAS.RT.ZS', u'NY.GDP.PETR.RT.ZS', u'NY.GDP.COAL.RT.ZS', u'NY.GDP.MINR.RT.ZS', u'NY.GDP.TOTL.RT.ZS', u'MS.MIL.XPND.GD.ZS'], dtype='object')

第二个清单如下:

data_2yr.columns[0:4]
Out[295]:
Index([u'LogdiffT', u'Year', u'Country', u'SW'], dtype='object')

我正在联系他们:

features=data_2yr.columns[0:4]|features_reduced

然而,它正在改变列表中值的顺序,并给出类似这样的内容

features
Out[296]:
Index([u'Country', u'FS.AST.DOMS.GD.ZS', u'FS.AST.PRVT.GD.ZS', u'LogdiffT', u'MS.MIL.XPND.GD.ZS', u'NE.IMP.GNFS.ZS', u'NY.GDP.COAL.RT.ZS', u'NY.GDP.DEFL.KD.ZG', u'NY.GDP.DEFL.KD.ZG.1', u'NY.GDP.DISC.CN', u'NY.GDP.DISC.KN', u'NY.GDP.MINR.RT.ZS', u'NY.GDP.NGAS.RT.ZS', u'NY.GDP.PCAP.KD.ZG', u'NY.GDP.PETR.RT.ZS', u'NY.GDP.TOTL.RT.ZS', u'NY.GDS.TOTL.ZS', u'SW', u'Year'], dtype='object'

首先:为什么会这样。在正常的字符串列表中,如果我执行相同的操作,它将保留订单。为什么要重新调整订单呢? 如果我在下面的普通列表中执行类似的操作,它会保留订单。

l=["a","b","c"] +["m","e","f"]
l
Out[299]:
['a', 'b', 'c', 'm', 'e', 'f']

那么为什么Pandas系列的表现会有所不同。

其次如何纠正它而不必进行一些排序等。我希望按照每个系列中出现的顺序进行排序

编辑:

好的,我已经找到了解决方案:

features=list(data_2yr.columns[0:4])+list(features_reduced)
[u'LogdiffT',
 u'Year',
 u'Country',
 u'SW',
 u'NY.GDP.DEFL.KD.ZG.1',
 u'NY.GDP.PCAP.KD.ZG',
 u'NY.GDP.DEFL.KD.ZG',
 u'NE.IMP.GNFS.ZS',
 u'NY.GDP.DISC.CN',
 u'FS.AST.PRVT.GD.ZS',
 u'FS.AST.DOMS.GD.ZS',
 u'NY.GDS.TOTL.ZS',
 u'NY.GDP.DISC.KN',
 u'NY.GDP.NGAS.RT.ZS',
 u'NY.GDP.PETR.RT.ZS',
 u'NY.GDP.COAL.RT.ZS',
 u'NY.GDP.MINR.RT.ZS',
 u'NY.GDP.TOTL.RT.ZS',
 u'MS.MIL.XPND.GD.ZS']

但是如果我不将它们转换为列表,为什么会这样呢?

2 个答案:

答案 0 :(得分:0)

|没有连接;它需要联盟,这可能会有意想不到的顺序。要连接,请使用pandas.concat

你在这里想要达到的目标并不是很清楚。您似乎在使用pandas Index对象而没有任何附带的系列,尽管这些系列通常不是特别有用。

答案 1 :(得分:0)

pandas.Index不是列表。正如documentation所说,它是一个"不可变的ndarray实现了一个有序的,可切片的集合"。使用+运算符创建它们的集合并且似乎不保证保留的顺序。将它们转换为列表时,使用+进行正常的列表连接。