Вариант использования
Я использую файлы Apache Parquet в качестве быстрого формата ввода-вывода для пространственных данных большого размера, над которыми я работаю в Python с GeoPandas.Я сохраняю геометрические объекты в виде WKB и хотел бы записать систему координат координат (CRS) в виде метаданных, связанных с данными WKB.
Проблема кода
Я пытаюсьназначить произвольные метаданные объекту pyarrow.Field
.
То, что я пробовал
Предположим, table
является pyarrow.Table
, созданным из df
,pandas.DataFrame
:
df = pd.DataFrame({
'foo' : [1, 3, 2],
'bar' : [6, 4, 5]
})
table = pa.Table.from_pandas(df)
В соответствии с документами pyarrow
метаданные столбца содержатся в field
, который принадлежит schema
( source ), и необязательных метаданныхможет быть добавлен к 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
object например,
df['foo']._metadata.append({'crs' : '4283'})
, но это не возвращается в метаданных при вызове метода pandas_metadata
( docs ) на атрибуте schema
ibute объекта table
.
Исследования
По стеку этот вопрос остается без ответа, а этот связанвопрос касается Scala, а не Python и pyarrow
. В другом месте Я видел метаданные, связанные с pyarrow.Field
объектом, но только путем создания экземпляров pyarrow.Field
и pyarrow.Table
объектов с нуля.
PS
Это моя первая публикация в stackoverflow, поэтому заранее спасибо и приносим извинения за любые ошибки.