diff --git a/geopandas/_vectorized.py b/geopandas/_vectorized.py index d31cfc9..673cb39 100644 --- a/geopandas/_vectorized.py +++ b/geopandas/_vectorized.py @@ -886,6 +886,9 @@ def transform(data, func): result = np.empty(n, dtype=object) for i in range(n): geom = data[i] - result[i] = transform(func, geom) + if _isna(geom): + result[i] = geom + else: + result[i] = transform(func, geom) return result diff --git a/geopandas/tests/test_crs.py b/geopandas/tests/test_crs.py index 2936d00..a804d4b 100644 --- a/geopandas/tests/test_crs.py +++ b/geopandas/tests/test_crs.py @@ -49,6 +49,15 @@ def test_to_crs_transform(): assert_geodataframe_equal(df, utm, check_less_precise=True) +def test_to_crs_transform__missing_data(): + # https://github.com/geopandas/geopandas/issues/1573 + df = df_epsg26918() + df.loc[3, "geometry"] = None + lonlat = df.to_crs(epsg=4326) + utm = lonlat.to_crs(epsg=26918) + assert_geodataframe_equal(df, utm, check_less_precise=True) + + def test_to_crs_inplace(): df = df_epsg26918() lonlat = df.to_crs(epsg=4326)