首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以将包含数组的GeoDataFrame保存到GeoPackage文件中吗?

我可以将包含数组的GeoDataFrame保存到GeoPackage文件中吗?
EN

Stack Overflow用户
提问于 2022-02-01 15:26:56
回答 1查看 626关注 0票数 0

我有一个具有一些属性列和一个几何列(只是一个普通的GeoDataFrame )的geopandas。通常,我使用以下方法将GDF保存为GeoPackage giles (.gpkg):

代码语言:javascript
复制
gdf.to_file('path_to_file.gpkg', driver='GPKG')

这很好,除非我的GDF有一个列,其中的条目是数组。假设在几何学列旁边有两个列,其中一个列包含每个条目的numpy数组。如果我试图将其保存为gpkg,则会给出错误:

代码语言:javascript
复制
ValueError: Invalid field type <class 'numpy.ndarray'>

因此,似乎gpkg无法处理表中的数组。我想要包含的数组是简单标志(所以值为0和1)。我找到了两个解决办法,它们可以正常工作,但有点混乱:

  1. 生成数组值的字符串。这是可行的,但我非常希望将它作为一个array...
  2. Create,作为每个数组值的一个单独的列。这也是可行的,但是我得到了一个包含大量列的GDF,我觉得应该有更好的方法来实现这一点。

有谁知道这个问题有更好的解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-01 19:46:06

我相信这只是.gpkg格式的一个限制。但是,我认为最好的解决方法是将数组存储为字符串,就像您建议的那样。如果需要使用ast literal_eval(),可以轻松地将它们转换回新闻gdf中的数组。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import geopandas as gpd
from shapely.geometry import LineString, Point
from ast import literal_eval

gdf = gpd.GeoDataFrame({'id': [1, 2, 3], 'array_col': [np.array([0,1,2]), np.array([0,1,2]), np.array([0,1,2])]},
                       geometry=[LineString([(1, 1), (4, 4)]),
                                 LineString([(1, 4), (4, 1)]),
                                LineString([(6, 1), (6, 6)])])

gdf['array_col'] = gdf['array_col'].apply(lambda x: str(x))

gdf.to_file('path_to_file.gpkg', driver='GPKG')

gpkg = gpd.read_file('path_to_file.gpkg')

gpkg['array_col'] = gpkg['array_col'].apply(lambda x: np.array(literal_eval(x.replace(' ', ','))))

在此之后,我们可以再次访问np数组。

代码语言:javascript
复制
print(gpkg['array_col'][0])

array([0, 1, 2])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70943128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档