Python 层理化散斑的奇怪结果

Python 层理化散斑的奇怪结果,python,pandas,Python,Pandas,当我在分层程序之前删除一些行时,我收到了奇怪的结果 机器学习。我需要调查数据组的ML结果 从sklearn.model_选择导入分层hufflesplit def STRATFID(测向、目标、测试_sz=0.2): 剥离=分层剥离剥离(n_剥离=1,测试大小=测试大小,随机状态=42) 对于tr_idx,te_idx在split.split中(df,df[target]): 列车=df.loc[tr_idx] 测试=测向位置[te_idx] 回程列车 df=pd.DataFrame(数据={

当我在分层程序之前删除一些行时,我收到了奇怪的结果

机器学习。我需要调查数据组的ML结果

从sklearn.model_选择导入分层hufflesplit
def STRATFID(测向、目标、测试_sz=0.2):
剥离=分层剥离剥离(n_剥离=1,测试大小=测试大小,随机状态=42)
对于tr_idx,te_idx在split.split中(df,df[target]):
列车=df.loc[tr_idx]
测试=测向位置[te_idx]
回程列车
df=pd.DataFrame(数据={
“性别”:[1,1,0,1,1,0,0,0,1,0,0,,
“年龄”:[13,45,1,45,15,16,16,16,15,15],
‘胆固醇’:[1,2,2,1,1,1,1,1,1,1,1],
“烟雾”:[0,0,1,1,7,8,3,4,4,2]},
dtype=np.int64)
df1=df.loc[df['age']>13]
X_序列,X_测试=分层FID(df1,[‘性别’],0.2)
打印(X_系列)
我希望对数据进行正确的分层。但我的输出如下:
性别年龄胆固醇烟雾
0楠楠楠楠楠
4     1.0  15.0          1.0    7.0
1     1.0  45.0          2.0    0.0
6     0.0  16.0          1.0    3.0
3     1.0  45.0          1.0    1.0
7     0.0  16.0          1.0    4.0
Nan值不是预期值。。。。
如果我对整个df进行分层(当df1=df时),所有都可以。我做错了什么?

一旦您根据某些特定条件删除了几行并将其存储到新数据框中,新数据框仍保留相同的索引。当你通过这个数据帧进行分层时,它会考虑缺失索引,例如索引0,它不存在于新的数据帧中(按年龄过滤器删除),因此用楠替换它。使用df1重置索引。重置索引(inplace=True)del df1['index'],然后通过分层。
from sklearn.model_selection import StratifiedShuffleSplit
import pandas as pd
import numpy as np

def stratifid(df, target, test_sz = 0.2):
 split = StratifiedShuffleSplit(n_splits = 1, test_size  = test_sz, random_state = 42)
 for tr_idx, te_idx in split.split(df, df[target]):
   train = df.loc[tr_idx]
   test  = df.loc[te_idx]
 return train, test

df = pd.DataFrame(data = {
    'gender' :      [1,  1,  0, 1,  1,  0,  0,  0,  1,  0, ],
    'age' :         [13, 45, 1, 45, 15, 16, 16, 16, 15, 15],
    'cholesterol' : [1,  2,  2, 1, 1, 1, 1, 1, 1, 1],
    'smoke' :       [0,  0,  1, 1, 7, 8, 3, 4, 4, 2]},
     dtype = np.int64)

df1 = df.loc[df['age'] > 13]
df1.reset_index(inplace=True)
del df1['index']

X_train, X_test = stratifid(df1, ['gender'], 0.2)
print(X_train)