如何为 python 中的 xarray 值添加后缀或前缀?
how to add suffix or prefix to xarray values in python?
我在xarray中有一组数据,我需要给data/value添加一些后缀或前缀。
为了展示我想做的事情,我在这里引用了一个在 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')
我想知道为什么会这样,正确的做法是什么?
谢谢
可以使用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中有一组数据,我需要给data/value添加一些后缀或前缀。
为了展示我想做的事情,我在这里引用了一个在 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')
我想知道为什么会这样,正确的做法是什么? 谢谢
可以使用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')