【发布时间】:2019-08-27 23:39:06
【问题描述】:
用例
我正在使用 Apache Parquet 文件作为我在 Python 中使用 GeoPandas 处理的大型空间数据的快速 IO 格式。我将要素几何存储为 WKB,并希望将坐标参考系统 (CRS) 记录为与 WKB 数据关联的元数据。
代码问题
我正在尝试将任意元数据分配给 pyarrow.Field 对象。
我的尝试
假设table 是一个从df 实例化的pyarrow.Table,一个pandas.DataFrame:
df = pd.DataFrame({
'foo' : [1, 3, 2],
'bar' : [6, 4, 5]
})
table = pa.Table.from_pandas(df)
根据pyarrow 文档,列元数据包含在属于schema (source) 的field 中,可选的元数据可以添加到field (source)。
如果我尝试为 metadata 属性赋值,则会引发错误:
>>> table.schema.field_by_name('foo').metadata = {'crs' : '4283'}
AttributeError: attribute 'metadata' of 'pyarrow.lib.Field' objects is not writable
>>> table.column(0).field.metadata = {'crs' : '4283'}
AttributeError: attribute 'metadata' of 'pyarrow.lib.Field' objects is not writable
如果我尝试将一个字段(通过add_metadata 方法关联的元数据)分配给一个字段,它会返回一个错误:
>>> table.schema.field_by_name('foo') = (
table.schema.field_by_name('foo').add_metadata({'crs' : '4283'})
)
SyntaxError: can't assign to function call
>>> table.column(0).field = table.column(0).field.add_metadata({'crs' : '4283'})
AttributeError: attribute 'field' of 'pyarrow.lib.Column' objects is not writable
我什至尝试将元数据分配给 pandas.Series 对象,例如
df['foo']._metadata.append({'crs' : '4283'})
但是当在table 对象的schema 属性上调用pandas_metadata (docs) 方法时,这不会在元数据中返回。
研究
在 stackoverflow 上,this 问题仍未得到解答,this 相关问题涉及 Scala,而不是 Python 和 pyarrow。 Elsewhere 我已经看到与 pyarrow.Field 对象关联的元数据,但只能通过从头开始实例化 pyarrow.Field 和 pyarrow.Table 对象。
附言
这是我第一次在 stackoverflow 上发帖,提前感谢并为任何错误道歉。
【问题讨论】:
标签: python pandas gis parquet pyarrow