Eu tenho um quadro de dados de pandas com duas colunas. Preciso alterar os valores da primeira coluna sem afetar a segunda e recuperar todo o quadro de dados com apenas os valores da primeira coluna alterados. Como posso fazer isso usando a aplicação em pandas?
python
pandas
dataframe
python-3.5
Amani
fonte
fonte
apply
em uma situação como esta. Opere diretamente na coluna.apply
o máximo possível. Se você não tem certeza de que precisa usá-lo, provavelmente não precisa. Eu recomendo dar uma olhada em Quando devo usar pandas apply () no meu código? .Respostas:
Dado um quadro de dados de amostra
df
como:o que você quer é:
que retorna:
fonte
apply
nunca deve ser usado em uma situação como estaapply
usa um loop interno sobre linhas que é muito mais lento que as funções vetorizadas, como por exemplodf.a = df.a / 2
(veja a resposta de Mike Muller).Para uma única coluna melhor para usar
map()
, assim:fonte
map()
melhor do queapply()
para uma única coluna?df['file_name'] = df['Path'].map(lambda a: os.path.basename(a))
Você não precisa de nenhuma função. Você pode trabalhar diretamente em uma coluna inteira.
Dados de exemplo:
Metade de todos os valores na coluna
a
:fonte
Embora as respostas fornecidas estejam corretas, elas modificam o quadro de dados inicial, o que nem sempre é desejável (e, dado o OP solicitar exemplos "usando
apply
", pode ser que eles desejem uma versão que retorne um novo quadro de dados, comoapply
faz).Isso é possível usando
assign
: é válido paraassign
colunas existentes, como a documentação declara (a ênfase é minha):Em resumo:
Observe que a função passará por todo o quadro de dados, não apenas pela coluna que você deseja modificar, portanto, será necessário selecionar a coluna certa em sua lambda.
fonte
Se você está realmente preocupado com a velocidade de execução da sua função de aplicação e possui um enorme conjunto de dados para trabalhar, pode usar o swifter para acelerar a execução, eis um exemplo para o swifter no pandas dataframe:
Isso permitirá que todos os núcleos da CPU calculem o resultado, portanto, será muito mais rápido que as funções de aplicação normais. Tente e me avise se ele se tornar útil para você.
fonte
Deixe-me tentar um cálculo complexo usando datetime e considerando nulos ou espaços vazios. Estou reduzindo 30 anos em uma coluna datetime e usando o
apply
método e tambémlambda
convertendo o formato datetime. A linhaif x != '' else x
cuidará de todos os espaços vazios ou nulos de acordo.fonte