Эта строка возвращает первые 4 строки в кадре данных combined
дляfeature_a
combined.iloc[0:4]["feature_a"]
Как и ожидалось, следующая строка возвращает 2-ю, 4-ю и 16-ю строки в кадре данных для столбца feature_a
:
combined.iloc[[1,3,15]]["feature_a"]
Эта строка устанавливает первые 4 строки в dataframe для feature_a
к 77
.
combined.iloc[0:4]["feature_a"] = 77
Эта строка что-то делает. Некоторые виды вычислений происходят, так как это занимает больше времени применительно к более длинному списку.
combined.iloc[[1,3,15]]["feature_a"] = 88
2-я, 4-я и 16-я строки не устанавливаются на, 88
если проверено с этим:
combined.iloc[[1,3,15]]["feature_a"]
Как я могу установить произвольный список строк столбца в кадре данных в значение, не принимая массивный обход кодирования?
Этот сценарий, кажется, должен быть довольно простым и распространенным.
Ответы:
Если вы поменяете местами селекторы и выберите сначала по столбцу, все будет работать нормально:
Код:
Почему?
Когда вы сделали первый (нерабочий путь), вы выбираете несмежный участок фрейма данных. Вы должны были получить предупреждение:
Это потому, что происходит две независимые операции.
combined.iloc[[1,3,15]]
создает новый фрейм данных только из трех строк, и фрейм обязательно копируется. тогда...["feature_a"]
но он выбран против копии.Таким образом, задание переходит к копии. Есть несколько способов исправить это, но в этом случае проще (и дешевле) сначала выбрать столбец, а затем выбрать части столбцов для назначения.
Тестовый код:
Результаты:
источник