You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将BigQuery获取的列表格式向量转为numpy数组用于计算?

解决从BigQuery向量列转numpy数组的问题

嘿,我之前也踩过这个坑!从BigQuery拉回来的page_vector列看起来是列表格式,但直接用apply转numpy数组就是不生效,多半是数据结构或者隐性类型的问题,咱们一步步捋清楚解决:

第一步:先搞清楚数据的真实情况

先别着急转数组,先看看你的向量到底是什么样的:

# 打印第一个元素的类型和具体内容
print(type(df['page_vector'].iloc[0]))
print(df['page_vector'].iloc[0])

这一步能帮你排查:

  • 是不是嵌套列表?比如每个元素是[[1.0,2.0]]而不是[1.0,2.0]
  • 是不是混了非数值类型?比如字符串形式的数字或者None空值
  • 会不会其实是JSON字符串?比如看起来像列表但实际是"[1.0,2.0]"这样的字符串

第二步:针对性解决问题

根据上面的排查结果,对应不同的解决方案:

情况1:是正常的数值列表,但apply没生效

这种情况最常见,直接把整个列转成二维列表再转numpy数组比apply更靠谱:

import numpy as np

# 把列转成二维列表,再直接转numpy数组
vector_array = np.array(df['page_vector'].tolist())

转完之后vector_array就是二维numpy数组了,直接可以用来计算均值、余弦相似度:

# 计算所有向量的均值
vector_mean = np.mean(vector_array, axis=0)

# 计算余弦相似度矩阵(需要导入sklearn)
from sklearn.metrics.pairwise import cosine_similarity
similarity_matrix = cosine_similarity(vector_array)

情况2:列表里有嵌套/空值/非数值元素

如果发现有嵌套(比如[[1.0,2.0]])或者空值None,先清理再转:

# 处理嵌套+空值的情况
df['page_vector'] = df['page_vector'].apply(
    lambda x: np.array(x[0], dtype=float) if isinstance(x, list) and len(x) > 0 else np.nan
)
# 过滤掉含空值的行(如果不需要保留)
df_clean = df.dropna(subset=['page_vector'])
# 转成二维数组
vector_array = np.array(df_clean['page_vector'].tolist())

如果是字符串形式的数字(比如['1.0','2.0']),就先把每个元素转成float:

df['page_vector'] = df['page_vector'].apply(
    lambda x: np.array([float(num) for num in x], dtype=float) if x is not None else np.nan
)

情况3:返回的是JSON字符串而非列表

有时候BigQuery客户端会把数组序列化成JSON字符串,这时候需要先解析:

import json

df['page_vector'] = df['page_vector'].apply(
    lambda x: np.array(json.loads(x), dtype=float) if x is not None else np.nan
)
vector_array = np.array(df['page_vector'].tolist())

最后验证结果

转完之后可以确认一下:

print(vector_array.shape)  # 应该是(n_samples, vector_dimension)的格式
print(type(vector_array))  # 输出<class 'numpy.ndarray'>

没问题的话就可以放心做后续的均值、余弦相似度计算啦!

内容的提问来源于stack exchange,提问作者dendog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:29