J'essaie de faire correspondre la chaîne avec l'utilisation de regex à partir de 59k lignes. Bien sûr, je m'attendais aux mêmes 59 000 lignes que le résultat. Cependant, le résultat ne renvoie que les 10 premières lignes.

Je pense que c'est une question idiote, mais je me demande toujours ce qui ne va pas ici.

y = str(data[['geometry']])
z = re.findall("(?<=\()\d.*(?=\))", y)

enter image description here

1
prawirs 26 août 2020 à 18:28

3 réponses

Meilleure réponse

J'ai ma propre solution en utilisant la boucle:

location = []
for l in data['geometry']:
    latlon = re.findall("(?<=\()\d.*(?=\))", l)
    location.append(z)


df_latlon = DataFrame(location)
df_latlon

enter image description here

0
prawirs 27 août 2020 à 02:04

Utilisez str.extract:

data['geometry'].str.extract(r'\((\d.*)\)', expand=False).tolist()

Voir la démo regex

EXPLICATION

                         EXPLANATION
--------------------------------------------------------------------------------
  \(                       '('
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \d                       digits (0-9)
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  \)                       ')'
1
Ryszard Czech 26 août 2020 à 19:47

Vous aurez probablement besoin de str.findall avec tolist()

Ex:

data['geometry'].str.findall("(?<=\()\d.*(?=\))").tolist()

Démo:

df = pd.DataFrame({'geometry': ['aa (123) bb (1.5)', 'aa (123) bb (1.5)', 'aa (123) bb (1.5)', 'aa (123) bb (1.5)']})
print(df['geometry'].str.findall("(?<=\()(\d.*?)(?=\))").tolist())

Sortie:

[['123', '1.5'], ['123', '1.5'], ['123', '1.5'], ['123', '1.5']]
1
Rakesh 26 août 2020 à 15:41