[英]Can I save a GeoDataFrame that contains an array to a GeoPackage file?
我有一个带有一些属性列和一个几何列(只是一个常规 GDF)的 geopandas GeoDataFrame。 通常我使用以下方法将 GDF 保存为 GeoPackage giles (.gpkg):
gdf.to_file('path_to_file.gpkg', driver='GPKG')
这很好用,除非我的 GDF 有一列条目是 arrays。 假设我在几何列旁边有两列,其中一列包含每个条目的 numpy 数组。 如果我然后尝试另存为 gpkg 它会给我错误:
ValueError: Invalid field type <class 'numpy.ndarray'>
因此,gpkg 似乎无法处理表中的 arrays。 我想包含的 arrays 是简单的标志(因此值为 0 和 1)。 我发现了两个工作正常但有点混乱的解决方法:
有人知道这个问题的更好解决方法吗?
我相信这只是 .gpkg 格式的一个限制。 但是,我认为最好的解决方法是将 arrays 存储为字符串,就像您建议的那样。 如果您需要使用 ast literal_eval(),您可以轻松地将它们转换回新闻 gdf 中的 arrays。
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 arrays。
print(gpkg['array_col'][0])
array([0, 1, 2])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.