2
votes

Comment appliquer une méthode à une trame de données Pandas

J'ai ce dataframe

   Col1

0  1000

1  2000 

a = z['Col1'].str.split('(').str[-1].str.split().str[0].apply(pd.to_numeric,errors='coerce')

Je voudrais le convertir en

   Col1  Col2

0  1000  3000

1  2000  4000

Je sais créer un dataframe (avec des index ) pour 1 colonne, mais pas pour plusieurs colonnes

Ce code produit ce résultat

   Col1              Col2

0  A (1000 EUR)  C ( 3000 USD)

1  B (2000 CHF)  D ( 4000 GBP)

comment puis-je modifier le code ci-dessus pour ajouter également col2 (idéalement utilisant la vectorisation plutôt que l'itération) (donc idéalement je ne voudrais pas avoir à entrer le même code pour chaque colonne)


0 commentaires

4 Réponses :


4
votes

Vous pouvez utiliser str.extract sur chaque colonne et utilisez pd.concat pour construire un nouveau dataframe à partir du résultat:

x = np.concatenate([df[col].str.extract(r'(?<=\()\s*(\d+)') for col in df], axis=1)
pd.DataFrame(x, columns=df.columns)

   Col1  Col2
0  1000  3000
1  2000  4000


1 commentaires

pas besoin d'appliquer ici. Je suis d'accord là-dessus.





0
votes

Vous pouvez utiliser la méthode applymap d'un dataframe pandas. Cela ressemblerait à quelque chose comme:

import re

function_to_apply = lambda x: re.search("[0-9]+", x).group()
your_dataframe.applymap(function_to_apply)

Quelque chose comme ça fonctionnerait dans votre cas, et serait certainement un peu plus simple!


2 commentaires

J'aime ce que vous avez fait avec re . Vous devez cependant utiliser df.applymap dans ce cas! Voir ma réponse ci-dessus.


Merci, et bonne prise, je modifierai en conséquence!