Here's a quick attempt to deal with your data structure. Please feel free to edit things around to make it behave exactly how you want it:
# Importing necessary libraries
import pandas as pd
import geopandas as gpd
import shapely
import datetime
# Setting test input data
my_list = (
[(((-87.932083, 26.886283), (-87.921784, 29.892553)), 'Re: Locate Message 2164792294', datetime.date(2021, 5, 27)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20)),
(((-86.940304, 26.890503), (-95.938405, 24.891903)), 'Re: Locate Message 2163994250', datetime.date(2021, 5, 20))])
# List of Dataframes that will later be concatenated into one large dataframe
pre_dfs = []
# Looping over all "rows" in `my_list`
for this_item in my_list:
# Generating a shapely geometry
geometry = shapely.geometry.LineString(this_item[0])
msg = this_item[1]
date = this_item[2]
# Creating a single-row-DataFrame.
this_df = pd.DataFrame({'geometry':[geometry],
'msg':[msg],
'date':[date]})
# Appending this single-row-DataFrame to the `pre_dfs` list
pre_dfs.append(this_df)
# Concatenating all the separate dataframes into one big DataFrame
single_df = pd.concat(pre_dfs, ignore_index=True).reset_index(drop=True)
# Finally, generating the actual GeoDataFrame that can be manipulated
geo_df = gpd.GeoDataFrame(single_df,
geometry='geometry',
crs='epsg:4326')
Once you have this set up, you can run geo_df.plot()
to plot it and do a whole bunch of other operations.
The big key here is inside that for
loop in which we parse each of the elements in my_list
and generate a regular Pandas DataFrame for each element. If your object structure is a bit more complex, you can just tailor that part of the code to match exactly what you want.