Как добавить суффикс или префикс к значениям xarray в python? - PullRequest
0 голосов
/ 07 марта 2020

У меня есть набор данных в xarray, и мне нужно добавить некоторый суффикс или префикс к данным / значению.

, чтобы показать, что я хочу сделать, я привожу пример, который работает в pandas: делая

import pandas as pd
df = pd.DataFrame({'col':['a',0]})
df
df['col'] = 'str' + df['col'].astype(str)

, я могу изменить с

>>> df
  col
0   a
1   0

в

>>> df
    col
0  stra
1  str0

, но в xarray инициализируется как:

import xarray as xr

da = xr.DataArray(['1', '2', '3'], [('x', [0, 1, 2])])

dataset = da.to_dataset(name="foo")

массив будет:

<xarray.Dataset>
Dimensions:  (x: 3)
Coordinates:
  * x        (x) int32 0 1 2
Data variables:
    foo      (x) int32 1 2 3

с помощью

dataset['foo'].astype(str)

Я могу изменить столбец на строки:

<xarray.DataArray 'foo' (x: 3)>
array(['1', '2', '3'], dtype='<U11')
Coordinates:
  * x        (x) int32 0 1 2

, но тогда, когда я пытаюсь добавить суффикс, добавив строку суффикса:

dataset['foo'] = dataset['foo'].astype(str) + 'suffix'

Я получил ошибку:

UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U11'), dtype('<U11')) -> dtype('<U11')

Traceback (most recent call last):

  File "<ipython-input-9-a74b1524f2e5>", line 1, in <module>
    dataset['foo'] = dataset['foo'].astype(str) + 'suffix'

  File "C:\ProgramData\Anaconda3\lib\site-packages\xarray\core\dataarray.py", line 1972, in func
    if not reflexive

  File "C:\ProgramData\Anaconda3\lib\site-packages\xarray\core\variable.py", line 1674, in func
    if not reflexive

UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U11'), dtype('<U11')) -> dtype('<U11')

Интересно, почему это происходит и как правильно это сделать? Спасибо * * 1030

1 Ответ

0 голосов
/ 08 марта 2020

Вы можете использовать символьный модуль numpy для добавления строк.

import xarray as xr
import numpy as np

da = xr.DataArray(['1', '2', '3'], [('x', [0, 1, 2])])
dataset = da.to_dataset(name="foo")

dataset['foo'] = ('x', np.char.add(dataset['foo'].astype(str) ,'suffix') )
dataset

>>>array(['1suffix', '2suffix', '3suffix'], dtype='<U7')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...