3 votos

No se puede formar un marco de datos a partir de una salida paralela

He estado desarrollando un código para tomar un .csv con coords lat-long y convertirlos en LineStrings antes de crear offsets paralelos para ellos. Esto ha estado funcionando hasta ahora, pero ayer después de borrar mis variables, empecé a correr en un error al ejecutar mi código.

from shapely.geometry import LineString, Point
import pandas as pd
import geopandas as gpd

df = pd.read_csv("***/Kingsboro Rd NE.csv")
df = df.drop_duplicates()

geometry = [Point(xy) for xy in zip(df.lng, df.lat)]
df['geometry'] = geometry
df['agg'] = 1
df_line = gpd.GeoDataFrame(df.groupby(['agg'])['geometry'].apply(lambda x: LineString(x.tolist())), geometry='geometry')
df_line = df_line.set_crs("EPSG:4326")
df_line = df_line.to_crs("EPSG:2240")

df_offset_l = pd.DataFrame(df_line.iloc[0].geometry.parallel_offset(25, 'left', 2, mitre_limit = 100.0))

Todo funciona bien hasta la última línea, en la que obtengo el siguiente error:

ValueError: DataFrame constructor not properly called!

Como ya he comentado, hasta ayer no me salía este error, y necesito que funcione correctamente para realizar los otros pasos de manipulación de datos que siguen a esta línea de código.

Aquí hay una muestra del archivo de entrada:

lat

largo

33.85556214

-84.35139656

33.8

-84.35140193

33.85556214

-84.35139656

33.85553986

-84.35136706

33.85550868

-84.35134828

0 votos

Intenta crear DataFrame o GeoDataFrame ?

3voto

nitinsavant Puntos 6

DataFrame o GeoDataFrame necesita un parámetro iterable pero se le pasa el objeto shapely ( LineString ) a la misma. Por lo que se obtiene ese error.

Haz la línea de compensación:

offset_line = df_line.iloc[0].geometry.parallel_offset(25, 'left', 2, mitre_limit = 100.0)

Entonces,

  • Si necesita un DataFrame utilizar de esta manera:

    df_offset_l = pd.DataFrame({"geometry": [offset_line]})
    
    # OUTPUT (DataFrame)
    #     geometry
    # 0   LINESTRING (2240477.867 1402553.588, 2240476.3...
  • Si necesita un GeoDataFrame utilizar de esta manera:

    df_offset_l = gpd.GeoDataFrame({"geometry": [offset_line]})
    
    # OUTPUT (GeoDataFrame)
    #     geometry
    # 0   LINESTRING (2240477.866711137 1402553.58829784...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X