In this case I have a problem with this: Im trying to split a column "Ubicación Finalizada" in two, but I have a problem with a "," string, I can't take it out and that make some problems in the after code because I can't convert it to float in the "Latitud" column with the 'Longitud' I dont have problem.
Code:
df['Latitud'] = df['Ubicación finalizada'].str.slice(0, 12).astype(str)
df["Latitud"] = df["Latitud"].replace(",", "" )
df['Latitud'] = df['Latitud'].astype('float')
df['Longitud'] = df['Ubicación finalizada'].str.slice(12, 25)
df['Longitud1'] = df['Longitud'].astype('float')
df['Cliente'] = df['Cliente'].astype('str')
df['Conductor'] = df['Conductor'].astype('str')
df['Zona de tarifa'] = df['Zona de tarifa'].str.slice(4, 7)
df["Zona de tarifa1"] = 'Zona ' df['Zona de tarifa'].astype('str') ' $' df['Precio'].astype('str') ' Conductor: ' df['Conductor'].astype('str')
colors= ['lightgray', 'darkred', 'lightgreen', 'green', 'pink', 'darkgreen', 'lightblue', 'darkpurple', 'black',
'lightred', 'gray', 'orange', 'cadetblue', 'blue', 'purple', 'beige', 'white', 'darkblue', 'red']
map = folium.Map(location=[df.Latitud.mean(), df.Longitud.mean()], zoom_start=14, control_scale=True)
for index, location_info in df.iterrows():
folium.Marker([location_info["Latitud"], location_info["Longitud"]],icon=folium.Icon(color=colors[int(location_info['Zona de tarifa'])]),popup=location_info["Cliente"] ' ' location_info["Zona de tarifa1"]).add_to(map)
map
'''
Error:
ValueError Traceback (most recent call last)
<ipython-input-136-ccd19cd31b4c> in <module>
1 df['Latitud'] = df['Ubicación finalizada'].str.slice(1, 12).astype(str)
2 df["Latitud"] = df["Latitud"].replace(",", ",0" )
----> 3 df['Latitud'] = df['Latitud'].astype('float')
4 df['Longitud'] = df['Ubicación finalizada'].str.slice(12, 25)
5 df['Longitud1'] = df['Longitud'].astype('float')
6 frames /usr/local/lib/python3.7/dist-packages/pandas/core/dtypes/cast.py in astype_nansafe(arr, dtype, copy, skipna) 1199 if copy or is_object_dtype(arr.dtype) or is_object_dtype(dtype): 1200 # Explicit copy, or required since NumPy can't view from / to object. -> 1201 return arr.astype(dtype, copy=True) 1202 1203 return arr.astype(dtype, copy=copy)
ValueError: could not convert string to float: '34.9051275,'
Also I want to convert "# Externo" that is in the format 4.176466e 10 - to normal numbers.
CodePudding user response:
You can use .str.split
to split the string column and then convert it:
df[["lat", "lon"]] = df["Ubicación finalizada"].str.split(",", expand=True)
df[["lat", "lon"]] = df[["lat", "lon"]].astype(float)
print(df)
Prints:
Ubicación finalizada lat lon
0 -34.123,-56.156 -34.12300 -56.156
1 -35.1234,-57.156 -35.12340 -57.156
2 -36.12356,-58.156 -36.12356 -58.156
df
used:
Ubicación finalizada
0 -34.123,-56.156
1 -35.1234,-57.156
2 -36.12356,-58.156