Ausgabe
Ich habe einen Datenrahmen df wie diese 3 ersten Zeilen sind diese
Stadt | Längengrad | Breite |
---|---|---|
Toluca | W099.6569 | N19.2925 |
Pune | E73.8562 | N18.5167 |
Blütenbrunnen | E026.216667 | S29.116667 |
Zum Beispiel sollte die Bloemfontain-Reihe am Ende so aussehen
Stadt | Längengrad | Breite |
---|---|---|
Blütenbrunnen | -29.116667 | 26.216667 |
Ich habe diesen Code verwendet
pattern = r'(?P<d>[\d\.]+).*?(?P<m>[\d\.]+).*?(?P<s>[\d\.]+)'
dms = df['Latitude'].str.extract(pattern).astype(float)
df['LATITUDE'] = dms['d'] + dms['m'].div(60) + dms['s'].div(3600)
dms = df['Longitude'].str.extract(pattern).astype(float)
df['LONGITUDE'] = dms['d'] + dms['m'].div(60) + dms['s'].div(3600)
habe aber nicht den richtigen Längen- und Breitengrad
Lösung
Ich sehe nicht, wo es überhaupt notwendig ist, eine Mustersuche zu verwenden. So würde ich die Aufgabe lösen.
# function to perform the partitioning
def cnvrtCoord(val: str) -> float:
sgn = +1
if val[0] == 'S' or val[0] == 'W':
sgn = -1
return float(val[1:]) * sgn
Um dann den Inhalt der Längengrad- und Breitengradspalten zu ändern, verwenden Sie:
df['Longitude'] = [cnvrtCoord(x) for x in df['Longitude'].tolist()]
df['Latitude'] = [cnvrtCoord(x) for x in df['Latitude'].tolist()]
Dies würde den unten gezeigten Datenrahmen bei Ihrem Eingabebeispiel erzeugen:
City Longitude Latitude
0 Toluca -99.656900 19.292500
1 Pune 73.856200 18.516700
2 Bloemfontain 26.216667 -29.116667
Beantwortet von – itprorh66
Antwort geprüft von – Dawn Plyler (FixError Volunteer)