Utilisation de astype avec une fonction apply

Bonjour,

je cherche à convertir convertir les colonnes d’un dataframe en string avant de les concaténer

J’avais réalisé la commande suivante

transactions[‹ prod_cat ›] = transactions.apply(lambda tr : tr[‹ prod_cat_code ›].astype(‹ str ›) + « - » + tr[‹ prod_subcat_code ›].astype(‹ str ›) , axis =1)

qui renvoie l’erreur suivante : ‹ str › object has no attribute ‹ astype ›

La bonne réponse étant

transactions[‹ prod_cat ›] = transactions.astype(‹ str ›).apply(lambda row : row[‹ prod_cat_code ›] + « - » + row[‹ prod_subcat_code ›], axis =1)

Mais je ne comprends pas la logique car on souhaite effectuer la conversion en string uniquement sur les 2 colonnes concernées et non sur tout le tableau transaction. Je ne comprends pas pourquoi ma proposition n’était pas possible.

Quelqu’un saurait m’expliquer la logique ?

Bonjour Marc Antoine,
le problème vient de la fonction astype. Cette fonction fait partie du package Pandas, elle ne s’applique qu’à des objets pandas, or les objets tr[‹ prod_cat_code ›] et tr[‹ prod_subcat_code ›] ne sont pas des objets pandas, ce sont des nombre int (cellules du Dataframe). L’équivalent valable de votre méthode serait :

transactions[‹ prod_cat ›] = transactions.apply(lambda row: str(row[‹ prod_cat_code ›]) +’ '+str(row[‹ prod_subcat_code ›]), axis = 1)

str() permet de convertir un nombre en string :wink:

J’espère avoir répondu à votre question ,

bonne journée !

1 Like

Tout à fait. Merci Maxime.
Bonne journée :slight_smile: