如何在python中为xarray值添加后缀或前缀?

如何在python中为xarray值添加后缀或前缀?,python,python-xarray,Python,Python Xarray,我在xarray中有一组数据,我需要为数据/值添加一些后缀或前缀 为了说明我想做什么,我在这里举了一个在熊猫身上起作用的例子: 通过做 import pandas as pd df = pd.DataFrame({'col':['a',0]}) df df['col'] = 'str' + df['col'].astype(str) 我可以从 >>> df col 0 a 1 0 到 但在xarray中,我认为: import xarray as xr da

我在xarray中有一组数据,我需要为数据/值添加一些后缀或前缀

为了说明我想做什么,我在这里举了一个在熊猫身上起作用的例子: 通过做

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

>>> df
  col
0   a
1   0

但在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
我可以将列更改为字符串:

<xarray.DataArray 'foo' (x: 3)>
array(['1', '2', '3'], dtype='<U11')
Coordinates:
  * x        (x) int32 0 1 2
我得到一个错误:

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')

ufunctype错误:ufunc“add”不包含具有签名匹配类型(dtype)的循环(“您可以使用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')
将xarray作为xr导入
将numpy作为np导入
da=xr.DataArray(['1','2','3'],[('x',[0,1,2]))
数据集=da.to_数据集(name=“foo”)
数据集['foo']=('x',np.char.add(数据集['foo'].astype(str),'suffix'))
数据集

>>>array(['1suffix','2suffix','3suffix'],dtype='请提供完整的错误消息,以及一个。谢谢!您的方法有效!此方法将向整个dataarray添加后缀,但遵循相同的方法,我对其进行了一点修改,使其仅适用于数据集中的一个数组,例如,在问题中它将是:dataset[(fo)] =('x',np.char。添加(‘Pr'’,DataSet [ Foo')。Stasype(STR))很高兴为您工作。请考虑将答案标记为解决方案,以便其他人可以看到接受的解决方案。
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')
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')