假设我
import pyarrow as pa
ca = pa.chunked_array([['a', 'b', 'b', 'c']])
print(ca)
<pyarrow.lib.ChunkedArray object at 0x7fc938bcea70>
[
[
"a",
"b",
"b",
"c"
]
]
我想最终得到:
pyarrow.Table
_a: uint8
_b: uint8
_c: uint8
----
_a: [[1,0,0,0]]
_b: [[0,1,1,0]]
_c: [[0,0,0,1]]
我该怎么做?
我知道可以通过转换为 pandas 来做到这一点,但是可以用只是 PyArrow (以避免承担额外的依赖项)?
编辑 :numpy 已经是 PyArrow 的必需依赖项,所以我可以使用它。然而,这不是理想的解决方案,因此最好避免使用纯 NumPy 解决方案
import pyarrow as pa
ca = pa.chunked_array([['a', 'b', 'b', 'c']])
# 获取唯一值并创建字典映射
unique_values = sorted(set(ca.to_numpy()))
value_map = {value: i for i, value in enumerate(unique_values)}
# 创建一个存储编码值的列表
encoded_arrays = []
for value in unique_values:
encoded_arrays.append(pa.array((ca == value).to_numpy(dtype=uint8)))
# 从编码数组创建一个 PyArrow 表
table = pa.table({f'_{value}': arr for value, arr in zip(unique_values, encoded_arrays)})
print(table)
这将打印:
_a | _b | _c
--- | --- | ---
1 | 0 | 0
0 | 1 | 0
0 | 1 | 0
0 | 0 | 1
此代码首先获取 ChunkedArray 中的唯一值,然后创建一个将这些值映射到整数索引的字典。然后,它遍历唯一值,并为每个值创建一个新的 PyArrow 数组。每个数组都包含 1 和 0,指示 ChunkedArray 中的相应元素是否等于当前值。最后,它使用编码数组创建 PyArrow 表。
此方法避免了对 pandas 的任何依赖,并且仅使用 PyArrow 和内置的 Python 类型。
标签:python,pyarrow From: 78777855