Essa linha retorna as 4 primeiras linhas no quadro de dados combined
parafeature_a
combined.iloc[0:4]["feature_a"]
Como esperado, esta próxima linha retorna as 2ª, 4ª e 16ª linhas no quadro de dados da coluna feature_a
:
combined.iloc[[1,3,15]]["feature_a"]
Esta linha define os primeiros 4 linhas na trama de dados para feature_a
a 77
.
combined.iloc[0:4]["feature_a"] = 77
Essa linha faz alguma coisa. Algum tipo de cálculo está acontecendo, pois leva mais tempo quando aplicado a uma lista mais longa.
combined.iloc[[1,3,15]]["feature_a"] = 88
As linhas 2, 4 e 16 não são definidas para 88
quando marcadas com isso:
combined.iloc[[1,3,15]]["feature_a"]
Como definir uma lista arbitrária de linhas de uma coluna de um quadro de dados para um valor sem fazer um desvio de codificação em massa?
Esse cenário parece ser bastante direto e comum.
Respostas:
Se você inverter os seletores e selecionar primeiro a coluna, funcionará bem:
Código:
Por quê?
Quando você fez a primeira (maneira não útil), está selecionando uma seção não contígua do quadro de dados. Você deveria ter recebido o aviso:
Isso ocorre porque duas operações independentes estão ocorrendo.
combined.iloc[[1,3,15]]
cria um novo quadro de dados de apenas três linhas e o quadro é necessariamente copiado. então...["feature_a"]
mas ela é selecionada contra a cópia.Então a tarefa vai para a cópia. Existem várias maneiras de corrigir isso, mas, nesse caso, é mais fácil (e mais barato) selecionar a coluna primeiro e depois selecionar partes das colunas para atribuição.
Código do teste:
Resultados:
fonte