Стратифицированный Shuffle, создающий пустые строки с помощью loc - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать тренировочные и тестовые данные, используя StratifiedShuffleSplit в Sklearn со знаменитым набором данных c (файл train.csv).

Все, что я делаю, это загружаю данные в pandas фрейм данных (titanic_train) и удалите две строки, где Embark имеет нулевые значения, используя:

titanic_train.dropna(subset=['Embarked'],axis=0,inplace=True)

Затем я использую следующие строки кода для создания многослойного поезда и тестового набора данных на основе столбца Pclass.

from sklearn.model_selection import StratifiedShuffleSplit
split=StratifiedShuffleSplit(n_splits=1,test_size=0.2,random_state=42)
for train_index, test_index in split.split(titanic_train,titanic_train["Pclass"]):
    strat_train_set = titanic_train.loc[train_index]
    strat_test_set  = titanic_train.loc[test_index]

Приведенный выше код работает нормально, но он создает две пустые строки в strat_train_set и выдает мне следующее предупреждение.

...python37\lib\site-packages\ipykernel_launcher.py:4: FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

See the documentation here:
https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
  after removing the cwd from sys.path.

Я попытался найти, какие две строки многослойного разбиения не могут быть помещены в strat_train_set, и вот эти строки:

    PassengerId     Survived    Pclass  Name    Sex     Age     SibSp   Parch   Ticket  Fare    Cabin   Embarked    _merge
887     890     1   1   Behr, Mr. Karl Howell   male    26.0    0   0   111369  30.00   C148    C   left_only
888     891     0   3   Dooley, Mr. Patrick     male    32.0    0   0   370376  7.75    NaN     Q   left_only

Если я заменю lo c на ilo c в следующих двух строках

    strat_train_set = titanic_train.iloc[train_index]
    strat_test_set  = titanic_train.iloc[test_index]

ошибка исчезает, но я хочу понять, почему это происходит. .lo c также должен работать в этой ситуации, так как я использовал точно такой же код где-то еще, но я не получил ни предупреждения, ни пустых строк.

Data-> kaggle competitions download -c titanic    
link: https://www.kaggle.com/c/titanic/data 
file name: train.csv

Буду признателен за любые советы по этому вопросу

...