API · Pandas
Pandas DataFrame DataFrame.transform() Função
A função Pandas DataFrame transform() aplica uma função passada num DataFrame e transforma o DataFrame.
Nesta página
No Python Pandas, DataFrame.transform() aplica uma função a um DataFrame e retorna o resultado transformado. Esse método é útil quando você quer alterar valores sem mudar o comprimento do eixo selecionado em relação aos dados originais. Use-o para transformações elemento a elemento ou por Series, em vez de para uma redução que resume muitos valores em um único resultado.
Como DataFrame.transform() funciona
DataFrame.transform() passa os dados para uma função e reúne o resultado transformado. Com o padrão axis=0, a função é aplicada a cada coluna; axis=1 seleciona as linhas. O resultado precisa preservar o comprimento do eixo selecionado. Portanto, se uma função alterar esse comprimento, ela será incompatível e o pandas gerará um ValueError. Essa restrição torna o transform útil quando operações posteriores dependem de os valores permanecerem alinhados às linhas ou colunas originais.
Por exemplo, adicionar uma constante a cada valor modifica os dados sem alterar sua estrutura. Já um resumo, como um total, reduz vários valores a um resultado menor. Tenha essa diferença em mente ao escolher uma função e confira se o resultado é compatível com o eixo selecionado.
Sintaxe e parâmetros de DataFrame.transform()
A assinatura do método é DataFrame.transform(func, axis=0, *args, **kwargs). func é a transformação a ser aplicada. axis seleciona colunas (0 ou "index") ou linhas (1 ou "columns"). Os argumentos posicionais em *args e os argumentos nomeados em **kwargs são encaminhados à função. Isso é útil quando a transformação precisa de um valor configurável. Se a função já usa os valores padrão, omita esses argumentos extras.
O objeto retornado contém os dados transformados, sujeito à restrição de comprimento do eixo selecionado. Se o resultado da função não puder atender a essa restrição, ocorrerá um erro; isso não torna um resumo mais curto adequado para transform. Use uma operação de redução quando quiser obter um resumo.
Aplicar uma função a um DataFrame
Uma função chamável recebe cada Series selecionada. Neste exemplo, adicionar 2 altera todos os valores sem mudar as linhas e colunas. Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import pandas as pd
frame = pd.DataFrame({"sales": [10, 20], "cost": [2, 5]})
adjusted = frame.transform(lambda column: column + 2)
print(adjusted.to_dict(orient="list"))
{'sales': [12, 22], 'cost': [4, 7]}
A lambda é uma pequena função chamável que retorna uma Series com o mesmo comprimento da entrada. Para reutilizar a lógica, defina uma função nomeada e passe seu nome em func. Você também pode passar os argumentos necessários para essa função por meio de *args ou **kwargs. Os valores exibidos facilitam a conferência da aritmética e mostram que as duas colunas mantêm as posições originais das linhas.
Aplicar várias funções com DataFrame.transform()
Para aplicar várias transformações, passe uma lista de funções, como em frame.transform([normalize, standardize]), em que cada nome corresponde a uma função chamável disponível no escopo. Esse padrão solicita ao pandas que aplique cada transformação fornecida. Ele é útil quando você quer obter várias representações derivadas dos mesmos dados; escolha funções cujos resultados atendam ao requisito de comprimento do eixo selecionado. O resultado combinado exato depende das funções e do comportamento do pandas. Por isso, inspecione o objeto retornado para o seu caso de uso, em vez de presumir uma disposição específica das colunas. Este padrão de chamada é ilustrativo e não é apresentado como um exemplo executado.
DataFrame.transform() versus DataFrame.apply()
Use DataFrame.transform() quando cada operação precisar preservar o comprimento do eixo selecionado e manter os valores transformados alinhados à entrada. DataFrame.apply() oferece mais flexibilidade quanto ao formato do resultado de uma função, o que pode torná-lo mais adequado quando a operação retorna um resumo ou altera o formato do resultado de outra maneira. O comportamento dos dois métodos depende da função e do eixo. Portanto, escolha com base no resultado de que você precisa, sem presumir que um deles seja sempre mais rápido. Consulte DataFrame.apply() para conhecer os detalhes de chamada desse método.