0
votes

Extraire les nombres d'une corde en python

J'essaie d'extraire uniquement des numéros de surface d'une colonne de Pandas Dataframe: 568 SQ MI (1 471 km2) Ici, je veux seulement 568 L'espace entre le nombre et le SQ est un espace incassable.


1 commentaires

Je veux seulement 568 L'espace entre le nombre et le SQ est un espace incassable. Que signifie-t-il?


3 Réponses :


0
votes

Vous pouvez probablement faire cela

df[col].apply(lambda x:x[:3])


3 commentaires

Merci beaucoup, mais cette colonne du Dataframe a deux autres valeurs qui inclut des périodes ou des virgules Les deux autres valeurs sont de 1 179 m² (3 054 km2) et de 61,9 m² (160 km2)


Vous pouvez trouver la table mentionnée dans ce lien en.wikipedia.org/wiki/list_of_counties_in_missouri


Pour cela, vous pouvez utiliser cela, bien qu'il doit y avoir une solution plus grande que cela pourrait faire fonctionner le travail. df [col] .Apply (lambda x: x.split ("SQ") [0] .replace ("", "")) (remplacez le nom avec votre DF et votre col avec votre col)



0
votes

Essayez donc d'utiliser regex sur la chaîne.

par exemple: p> xxx pré>

sortie: p>

def fmt(row):
   number = re.findall(r"[0-9,.]+",row)
   return number[0]

numbers = list(map(fmt,df[col]))
df['fmt area'] = numbers


3 commentaires

Merci beaucoup, mais cette colonne du Dataframe a deux autres valeurs qui inclut des périodes ou des virgules Les deux autres valeurs sont de 1 179 m² (3 054 km2) et de 61,9 m² (160 km2)


Vous pouvez trouver la table mentionnée dans ce lien en.wikipedia.org/wiki/list_of_counties_in_missouri


Changer la regex à r "[0-9 ,.]"



0
votes

Vous pouvez utiliser la méthode .str la méthode et utiliser l'extrait et passer un motif d'expression régulier.

import pandas as pd
df = pd.DataFrame({"Area":["568 sq mi (1,471 km2)"]})

df["area changed"] = df.Area.str.extract(r"(\d+ \w+)")


1 commentaires

Merci beaucoup, mais cette colonne du Dataframe a deux autres valeurs qui inclut des périodes ou des virgules Les deux autres valeurs sont de 1 179 m² (3 054 km2) et de 61,9 m² (160 km2)