GeoPandas is great. If you are learning Geospatial Programming and work with vector data then you could do alot worse than giving GeoPandas a go. I’ve written a little about GeoPandas before; so first a couple of links.
Installing a Python Geospatial work environment that includes GeoPandas:
And if you want a simple guide to plotting then have a look here
In this post I have written 8 tips & tricks to downloading and manipulating a Shapefile using GeoPandas. These are the topics covered – more detail in the Notebook here
1. Downloading data and extracting it
import requests, zipfile, io ## Python imports # set the url to the data url = 'https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip' # Use requests to download that url and zipfile to extract it r = requests.get(url) z = zipfile.ZipFile(io.BytesIO(r.content)) z.extractall()
2. Loading and plotting in GeoPandas
import geopandas as gpd shape_data = “ne_50m_admin_0_countries.shp” # refer to z.namelist() gdf = gpd.read_file(shape_data) gdf.plot()
Or 1 and 2 combined! Or you can read directly into geopandas from a URL. Thanks to @James_O_Connor1
gdf = gpd.GeoDataFrame.from_file('https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip') gdf.plot()
3. Removing columns (in this case NAME_ZH or all columns with NAME in)
gdf.drop('NAME_ZH', axis=1, inplace=True)
## or
gdf.drop(list(gdf.filter(regex = 'NAME')), axis = 1, inplace = True)
4. Renaning columns (change AMDIN to C_Name)
gdf.rename(columns={"ADMIN": "C_Name"}, inplace=True)
5. Changing a column’s datatype (change MIN_ZOOM to an integer)
gdf = gdf.astype({'MIN_ZOOM': 'int32'})
6. Parsing an attribute query (country name = Belgium)
gdf_Bel = gdf.loc[gdf['C_Name'] == 'Belgium']
7. Converting a Pandas object (Dataframe) to a GeoPandas object (Dataframe)
projection = {'init': 'epsg:4326'} gdf_Bel = gpd.GeoDataFrame(gdf_Bel, crs = projection, geometry = 'geometry')
8. Saving your work
gdf_Bel.to_file("Belgium.shp")
For more context all the code with more detailed comments is in a easy to use Juypter Notebook here
I run training courses in the UK please do check out my training page for a Geospatial Python course near you. Or contact me for any training need on info@acgeospatial.co.uk – I’d be happy to help.
I am a freelancer able to help you with your projects. I offer consultancy, training and writing. Iād be delighted to hear from you. Please check out the books I have written on QGIS 3.4
https://www.packtpub.com/application-development/learn-qgis-fourth-edition
https://www.packtpub.com/application-development/qgis-quick-start-guide
Image credit https://unsplash.com/photos/pZQQ_UyphtA