I am currently running an experiment on automating a task by merging information from various file types and doing a number of operations to achieve this.
Currently, I am reading a list of GeoJSONs and trying to build a GeoDataFrame that contains both the geometry and the filename.
Example of file name structure in folder is: event1.json
The desired geodataframe should look like this:
index geometry event_name 0 LINESTRING1(coordinates...) event1 1 LINESTRING2(coordinates...) event2 2 LINESTRING3(coordinates...) event3
I am able to read the JSONs and create the geometries, but I am not able to assign the matching filename.
import os, geopandas as gpd event_tracks = gpd.GeoDataFrame(columns=['geometry', 'eventname']) directory = os.getcwd() for dir_root, dir_dir, js_file in os.walk(directory): for f in js_file: if f.endswith(".json"): fname = os.path.basename(f) fname, fext = fname.split('.') print (fname) print ('Reading Track Path JSON ' + f) with open(f, 'r') as path_f: event_tracks = gpd.read_file(path_f).append(event_tracks)
The code above works for geometries and generates a geodataframe with valid geometries. However, I cannot assign the event name into the column. So far, I've tried to:
- Create list of names and append list elements
- Reindex and concatenate two different dataframes
However, it either returns a NaN-filled column or an error such as: TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid.
Is there any workaround to do this?