__init__() 得到了一个意想不到的关键字参数 'geometry'

问题描述 投票:0回答:2

我正在尝试使用 python pandas 数据框中的

dask_geopandas
Nominatim
库获取印度尼西亚地区的经度和纬度。但是,它总是返回错误。我得到的最新错误:

__init__() got an unexpected keyword argument 'geometry'

这是我最近使用的代码:

import dask.dataframe as dd
import dask_geopandas as dask_gpd
import pandas as pd
from geopy.geocoders import Nominatim
import numpy as np

ddf = dd.from_pandas(df_cleaned, npartitions=4)

geolocator = Nominatim(user_agent="my_geocoder")

def geocode_area(area):
    try:
        location = geolocator.geocode(area)
        return (location.latitude, location.longitude)
    except:
        return (np.nan, np.nan)

ddf['latitude'] = np.nan
ddf['longitude'] = np.nan

ddf['latitude'], ddf['longitude'] = ddf['kodya / kab'].apply(lambda x: pd.Series(geocode_area(x)))

dask_gdf = dask_gpd.GeoDataFrame(ddf, geometry=dask_gpd.points_from_xy(ddf.longitude, ddf.latitude), crs='EPSG:4326')

ddf = dask_gdf.drop(columns=['geometry']).compute()

ddf.to_csv('processed_data.csv', index=False)

这种情况下可能的正确代码是什么?我只想得到一个基于

kodya / kab
的经度和纬度的熊猫数据框。数据框由 17000++ 行组成。提前谢谢你。

python pandas geometry geopandas dask-dataframe
2个回答
1
投票

您可以尝试使用 from_dask_dataframe 代替:

dask_gdf = dask_gpd.from_dask_dataframe(ddf, geometry=dask_gpd.points_from_xy(ddf.longitude, ddf.latitude))

0
投票

错误消息表明 geometry 关键字参数不是 GeoDataFrame 构造函数的有效参数。这可能是因为 dask_geopandas 使用与 GeoDataFrame 的 geopandas 不同的构造函数。

您可以将几何列添加到 ddf DataFrame,然后使用 dask_geopandas.from_dask_dataframe 函数将其转换为 GeoDataFrame,而不是将 geometry 关键字参数传递给 GeoDataFrame 构造函数。这是您应该可以使用的代码的更新版本:

import dask.dataframe as dd
import dask_geopandas as dask_gpd
import pandas as pd
from geopy.geocoders import Nominatim
import numpy as np

ddf = dd.from_pandas(df_cleaned, npartitions=4)

geolocator = Nominatim(user_agent="my_geocoder")

def geocode_area(area):
   try:
       location = geolocator.geocode(area)
       return (location.latitude, location.longitude)
   except:
       return (np.nan, np.nan)

ddf['latitude'] = np.nan
ddf['longitude'] = np.nan

ddf[['latitude', 'longitude']] = ddf['kodya / kab'].apply(lambda x: pd.Series(geocode_area(x)))

ddf['geometry'] = dask_gpd.points_from_xy(ddf['longitude'], ddf['latitude'])

dask_gdf = dask_gpd.from_dask_dataframe(ddf, crs='EPSG:4326')

dask_gdf.to_csv('processed_data.csv', index=False)

在这个更新的代码中,我们首先使用 apply 方法将纬度和经度列添加到 ddf DataFrame。然后我们使用 dask_geopandas.points_from_xy 函数添加几何列。最后,我们使用 dask_geopandas.from_dask_dataframe 函数将 ddf DataFrame 转换为 dask_geopandas.GeoDataFrame。

© www.soinside.com 2019 - 2024. All rights reserved.