J'ai un df comme ça:

Radiosoundings From Brazil
5   #  TEMP/PILOT de 82022, Boa Vista, Boa Vista Intl  (Brazil) | 02-50N | 060-42W | 84 m 
59  #  TEMP/PILOT de 82026, Tirios (Brazil) | 02-29N | 055-59W | 325 m 
108 #  TEMP/PILOT de 82099, Macapa-Aeroporto (Brazil) | 00-03N | 051-04W | 16 m 
192 #  TEMP/PILOT de 82107, Sao Gabriel Da Cachoeira (Aero) (Brazil) | 00-07S | 066-58W | 79 m 
255 #  TEMP/PILOT de 82193, Belem Aeroporto  (Brazil) | 01-23S | 048-29W | 16 m 
332 #  TEMP/PILOT de 82244, Santarem-Aeroporto (Brazil) | 02-26S | 054-43W | 72 m 
408 #  TEMP/PILOT de 82281, Sao Luiz Aeroporto  (Brazil) | 02-36S | 044-14W | 53 m 
479 #  TEMP/PILOT de 82332, Manaus Aeroporto  (Brazil) | 03-09S | 059-59W | 84 m 
547 #  TEMP/PILOT de 82397, Fortaleza (Brazil) | 03-46S | 038-36W | 26 m 

Je veux obtenir uniquement la longitude de latitude et le code de chaque ligne. Exemple:

Code  Lat    Lon 
82022 02-50N 060-42W

Comment puis-je faire cela s'il vous plaît?

1
Javier 25 avril 2020 à 04:39

2 réponses

Meilleure réponse

Expressions régulières avec une combinaison de str extract et rsplit pourrait aider: essayez ceci et confirmez que cela fonctionne dans tous les cas:

df['code'] = df[1].str.extract(r'((?<=TEMP/PILOT de\s)\d+)')
df['lon'] = df[1].str.rsplit('|').str[2]
df['lat'] = df[1].str.rsplit('|').str[1]
2
sammywemmy 25 avril 2020 à 02:01

Autrement

df['Code']=df[1].str.extract('((\d+)(?=\,\s))')[0]
df['Lat']=df[1].str.extract('(\d+\-\d+[N|S]+)')[0]
df['Long']=df[1].str.extract('(\d+\-\d+[E|W]+)')[0]

\d+)(?=\,\s - Tout chiffre immédiatement suivi d'un espace et d'une virgule

\d+\-\d+[N|S]+ - chiffre suivi de - puis suivi d'un chiffre et soit N ou S

\d+\-\d+[E|W]+ - chiffre suivi de -et puis suivi d'un chiffre et soit E ou W

2
wwnde 25 avril 2020 à 02:55