我试图在 Dask DataFrame 中拥有来自向量 np.array 的“向量”列。
使用 Pandas DataFrame 代码看起来像这样:
import pandas as pd
import numpy as np
vectors = np.array([
np.array([1, 2, 3]),
np.array([4, 5, 6]),
np.array([7, 8, 9])
])
df = pd.DataFrame({
"vector": vectors.tolist()
})
df
结果 df 是
矢量。 | |
---|---|
0 | [1,2,3] |
1 | [4,5,6] |
2 | [7,8,9] |
我尝试了几种选择:
选项#1
import dask.dataframe as dd
import dask.array as da
import numpy as np
vectors = np.array([
np.array([1, 2, 3]),
np.array([4, 5, 6]),
np.array([7, 8, 9])
])
vectors = da.from_array(vectors)
df = dd.from_dask_array(vectors)
df
这会产生 df,其中向量的每个值都有自己的列
选项#2
import dask.dataframe as dd
import dask.array as da
import numpy as np
# vectors = np.load(dataset_path / "vectors.npy")
vectors = np.array([
np.array([1, 2, 3]),
np.array([4, 5, 6]),
np.array([7, 8, 9])
])
df = dd.from_dask_array(da.from_array(vectors))
columns_to_drop = df.columns.tolist()
df["vector"] = df.apply(lambda row: tuple(row), axis=1, meta=(None, 'object'))
df = df.drop(columns=columns_to_drop)
df
这个可以产生正确的结果,但看起来很麻烦而且可能效率不高
dd.from_dict
:
vectors = np.array([
np.array([1, 2, 3]),
np.array([4, 5, 6]),
np.array([7, 8, 9])
])
df = dd.from_dict({'vector': vectors.tolist()}, vectors.shape[0]).compute()
print(df.head())
vector
0 [1, 2, 3]
1 [4, 5, 6]
2 [7, 8, 9]