在Cython中处理字符串的数据帧(Numpy数组)

2024-04-26 06:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Cython中读/写字符串的数据帧(Numpy数组)?你知道吗

当我处理整数或浮点数时,它工作得很好:

# Cython file numpy_.pyx
@boundscheck(False)
@wraparound(False)
cpdef fill(np.int64_t[:,::1] arr):
    arr[0,0] = 10
    arr[0,1] = 11
    arr[1,0] = 13
    arr[1,1] = 14
# Python code
import numpy as np
from numpy_ import fill
a = np.array([[0,1,2],[3,4,5]], dtype=np.int64)
print(a)
fill(a)
print(a)

给予

>>> a = np.array([[0,1,2],[3,4,5]], dtype=np.int64)
>>> print(a)
[[0 1 2]
 [3 4 5]]
>>> fill(a)
>>> print(a)
[[10 11  2]
 [13 14  5]]

另外,以下代码

# Python code
import numpy as np, pandas as pd
from numpy_ import fill
a = np.array([[0,1,2],[3,4,5]], dtype=np.int64)
df = pd.DataFrame(a)
print(df)
fill(df.values)
print(df)

给予

>>> a = np.array([[0,1,2],[3,4,5]], dtype=np.int64)
>>> df = pd.DataFrame(a)
>>> print(df)
   0  1  2
0  0  1  2
1  3  4  5
>>> fill(df.values)
>>> print(df)
    0   1  2
0  10  11  2
1  13  14  5

然而,当输入是一个字符串数组时,我很难弄清楚如何做同样的事情。例如,如何读取或修改Numpy数组或数据帧:

a2 = np.array([['000','111','222'],['333','444','555']], dtype='U3')
df2 = pd.DataFrame(a2)

我们的目标是通过Cython改变

'000' -> 'AAA'; '111' -> 'BBB'; '222' -> 'CCC'; '333' -> 'DDD'

我确实读过the following NumPy documentation pagethe following Cython documentation page,但还是不知道该怎么办。你知道吗

非常感谢你的帮助!你知道吗


Tags: importnumpydataframedfasnp数组array