Pandas 熊猫+;Scikit学习:分层k折叠问题

Pandas 熊猫+;Scikit学习:分层k折叠问题,pandas,scikit-learn,cross-validation,Pandas,Scikit Learn,Cross Validation,与数据帧一起使用时,scikit learn中的StratifiedKFold将返回从0到n的索引列表,而不是DF索引中的值列表。有没有办法改变这种状况 例: 给出: 0 (array([], dtype=64), array([0,1,2,3,4,5,6]) 1 (array([0,1,2,3,4,5,6]), array([], dtype=64)) 2 (array([0,1,2,3,4,5,6]), array([], dtype=64)) 我希望从df返回索引,而不是df的长度范围…

与数据帧一起使用时,scikit learn中的StratifiedKFold将返回从0到n的索引列表,而不是DF索引中的值列表。有没有办法改变这种状况

例:

给出:

0 (array([], dtype=64), array([0,1,2,3,4,5,6])
1 (array([0,1,2,3,4,5,6]), array([], dtype=64))
2 (array([0,1,2,3,4,5,6]), array([], dtype=64))

我希望从df返回索引,而不是df的长度范围…

您得到的数字只是
df的索引。索引由
StratifiedKFold
选择

要将其更改回数据帧的索引,只需

for i, (train, test) in enumerate(StratifiedKFold(df.index)):
    print i, (df.index[train], df.index[test])

0 (Index([], dtype='object'), Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g'], dtype='object'))
1 (Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g'], dtype='object'), Index([], dtype='object'))
2 (Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g'], dtype='object'), Index([], dtype='object'))

为什么这是一个问题,请注意,您的索引被分配了str值这一事实在这里并不重要。你应该使用整数数组来索引到你的df,你可以使用
iloc
在这里,我有一个原始的df,索引范围从0到274,然后我对它进行子采样到0到30=>所以我有30个介于0到274之间的数字。然后我在这个子矩阵上做了五次折叠,得到了从0到30的数字,而我的索引范围是从0到274。。。。这意味着我从KFolders中得到了一些“nan”值……你能发布代码来复制这些值吗?谢谢。幸运的是,我无法将粘贴复制到internet:(
0 (Index([], dtype='object'), Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g'], dtype='object'))
1 (Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g'], dtype='object'), Index([], dtype='object'))
2 (Index([u'a', u'b', u'c', u'd', u'e', u'f', u'g'], dtype='object'), Index([], dtype='object'))