【发布时间】:2015-09-23 06:59:55
【问题描述】:
当与 Dataframe 一起使用时,来自 scikit-learn 的 StratifiedKFold 返回一个从 0 到 n 的索引列表,而不是来自 DF 索引的值列表。有办法改变吗?
例如:
df = pd.DataFrame()
df["test"] = (0, 1, 2, 3, 4, 5, 6)
df.index = ('a', 'b', 'c', 'd', 'e', 'f', 'g')
for i, (train, test) in enumerate(StratifiedKFold(df.index)):
print i, (train, test)
给予:
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 的长度范围...
【问题讨论】:
-
为什么这是一个问题,请注意,您的索引被分配 str 值的事实在这里无关紧要。你应该使用整数数组来索引你的df,你可以在这里使用
iloc -
嗯,我有一个原始 df,其索引范围从 0 到 274,然后我将其二次采样到 0 到 30=> 所以我有 30 个介于 0 和 274 之间的数字。然后我做 tratifiedkfold在这个子矩阵上,得到从 0 到 30 的数字,而我的索引范围从 0 到 274....这意味着我从 kfolds 中得到了一些 'nan' 值...
-
你能发布代码来重现这个吗,谢谢
-
不幸的是我无法将粘贴复制到互联网:(
标签: pandas scikit-learn cross-validation