J'ai lu certaines données de tarification dans un fichier de données pandas); les valeurs apparaissent sous la forme:
$40,000*
$40000 conditions attached
Je veux le réduire aux valeurs numériques. Je sais que je peux faire une boucle et appliquer regex
[0-9]+
à chaque champ puis rejoindre la liste résultante, mais existe-t-il un moyen non bouclé?
Merci
Vous pouvez supprimer tous les non-chiffres en utilisant re.sub()
:
value = re.sub(r"[^0-9]+", "", value)
Vous pouvez utiliser Series.str.replace
:
import pandas as pd
df = pd.DataFrame(['$40,000*','$40000 conditions attached'], columns=['P'])
print(df)
# P
# 0 $40,000*
# 1 $40000 conditions attached
df['P'] = df['P'].str.replace(r'\D+', '').astype('int')
print(df)
les rendements
P
0 40000
1 40000
puisque \D
correspond à n'importe quel chiffre non décimal .
Vous pouvez utiliser la méthode de remplacement des pandas; vous pouvez également conserver le séparateur de milliers ',' et le séparateur de décimale '.'
import pandas as pd
df = pd.DataFrame(['$40,000.32*','$40000 conditions attached'], columns=['pricing'])
df['pricing'].replace(to_replace="\$([0-9,\.]+).*", value=r"\1", regex=True, inplace=True)
print(df)
pricing
0 40,000.32
1 40000
Vous n'avez pas besoin de regex pour cela. Cela devrait fonctionner:
df['col'] = df['col'].astype(str).convert_objects(convert_numeric=True)