Open dluks opened 1 week ago
Here's the full stack trace:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
File ~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:470, in Expr.__getattr__(self, key)
[469](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:469) try:
--> [470](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:470) return object.__getattribute__(self, key)
[471](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:471) except AttributeError as err:
AttributeError: 'MapPartitions' object has no attribute 'set_crs'
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
File ~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:620, in FrameBase.__getattr__(self, key)
[617](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:617) try:
[618](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:618) # Fall back to `expr` API
[619](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:619) # (Making sure to convert to/from Expr)
--> [620](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:620) val = getattr(self.expr, key)
[621](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:621) if callable(val):
File ~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:491, in Expr.__getattr__(self, key)
[490](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:490) link = "https://github.com/dask-contrib/dask-expr/blob/main/README.md#api-coverage"
--> [491](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:491) raise AttributeError(
[492](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:492) f"{err}\n\n"
[493](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:493) "This often means that you are attempting to use an unsupported "
[494](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:494) f"API function. Current API coverage is documented here: {link}."
[495](/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_core.py:495) )
AttributeError: 'MapPartitions' object has no attribute 'set_crs'
This often means that you are attempting to use an unsupported API function. Current API coverage is documented here: https://github.com/dask-contrib/dask-expr/blob/main/README.md#api-coverage.
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
Cell In[41], [line 1](vscode-notebook-cell:?execution_count=41&line=1)
----> [1](vscode-notebook-cell:?execution_count=41&line=1) ddf.set_crs(4326)
File ~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:3076, in DataFrame.__getattr__(self, key)
[3073](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:3073) raise err
[3074](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:3074) except AttributeError:
[3075](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:3075) # Fall back to `BaseFrame.__getattr__`
-> [3076](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:3076) return super().__getattr__(key)
File ~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:626, in FrameBase.__getattr__(self, key)
[623](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:623) return val
[624](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:624) except AttributeError:
[625](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:625) # Raise original error
--> [626](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:626) raise err
File ~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:615, in FrameBase.__getattr__(self, key)
[612](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:612) def __getattr__(self, key):
[613](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:613) try:
[614](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:614) # Prioritize `FrameBase` attributes
--> [615](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:615) return object.__getattribute__(self, key)
[616](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:616) except AttributeError as err:
[617](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:617) try:
[618](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:618) # Fall back to `expr` API
[619](https://vscode-remote+ssh-002dremote-002bpylos.vscode-resource.vscode-cdn.net/path/to/proj/~/miniforge3/envs/traits-py311/lib/python3.11/site-packages/dask_expr/_collection.py:619) # (Making sure to convert to/from Expr)
AttributeError: 'DataFrame' object has no attribute 'set_crs'
Thanks for the report. Looks like we just forgot to pass the crs
through at https://github.com/geopandas/dask-geopandas/blob/33e2af89318173c4b3b403e5f3b430fd3fcf88db/dask_geopandas/expr.py#L912-L914. This diff seems to fix it
diff --git a/dask_geopandas/core.py b/dask_geopandas/core.py
index b448319..4ef455c 100644
--- a/dask_geopandas/core.py
+++ b/dask_geopandas/core.py
@@ -878,7 +878,7 @@ def points_from_xy(df, x="x", y="y", z="z", crs=None):
)
return df.map_partitions(
- func, x, y, z, meta=geopandas.GeoSeries(), token="points_from_xy"
+ func, x, y, z, meta=geopandas.GeoSeries(crs=crs), token="points_from_xy"
)
diff --git a/dask_geopandas/expr.py b/dask_geopandas/expr.py
index a14e8bc..dcdafa8 100644
--- a/dask_geopandas/expr.py
+++ b/dask_geopandas/expr.py
@@ -910,7 +910,7 @@ def points_from_xy(df, x="x", y="y", z="z", crs=None):
)
return df.map_partitions(
- func, x, y, z, meta=geopandas.GeoSeries(), token="points_from_xy"
+ func, x, y, z, meta=geopandas.GeoSeries(crs=crs), token="points_from_xy"
)
Let us know if you're interested in making a PR with that change and a test.
Sure, I'm happy to take a stab at it when I have some time in the next few days.
Description
I am experiencing an issue when trying to reproject a
dask_geopandas.GeoSeries
ordask_geopandas.GeoDataFrame
to a new CRS. Theset_crs
andto_crs
methods return anAttributeError
indicating that theSeries
orDataFrame
object has no attributeset_crs
orto_crs
.I'm guessing this has to do with the fact that the geometry was created using
dask_geopandas.points_from_xy
, though even when I compute the GeoDataFrame, save it to disk, and re-read it usingdask_geopandas.read_parquet
, the issue still persists.Code to reproduce
Error Message
The following error is raised when attempting to use
to_crs
ongeom
alone:And on
ddf
:Expected Behavior
I expect the
to_crs
method to reproject either adask_geopandas.GeoSeries
ordask_geopandas.GeoDataFrame
to the new CRS without raising an error.System Information
python: 3.11 dask-geopandas: 0.3.1 dask: 2024.9.0 pandas: 2.2.2 OS: Ubuntu 22.04.4 LTS