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)
4 Réponses :
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
pas besoin d'appliquer ici. Je suis d'accord là-dessus.
très intéressant, comme celui-ci aussi. +1
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!
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!