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

DataFrame嵌入向量字符串列转float类型失败求助

问题描述

DataFrame中某列为object类型,每行存储形如'[-0.8783137 0.05478287 -0.08827557 0.69203985 0.06209986]'的字符串嵌入向量(每行含768个数值),尝试转为float类型时触发报错:

ValueError: could not convert string to float: '[-0.8783137 0.05478287 -0.08827557 0.69203985 0.06209986]'

尝试过以下代码但未解决问题:

import pandas as pd

df = pd.DataFrame({'encoded_values': ['[-0.8783137, 0.05478287, -0.08827557, 0.69203985, 0.06209986]', 
                            '[0.31444644, -0.6546649, 0.7211526, 0.9819127, 0.74042267]']})
df['encoded_values']=df['encoded_values'].astype(float)
df['encoded_values'] = df['encoded_values'].str.replace(',', '').astype(float)
df['encoded_values'] = pd.to_numeric(df['encoded_values'], downcast='float')
解决方案

问题根源在于字符串包含方括号、空格/逗号分隔符,无法直接转为单个float值,需先解析为数值列表/数组。以下是三种可行方法:

方法1:用ast.literal_eval解析字面量

这是最通用的方法,能直接将合法的Python字面量字符串转为列表:

import pandas as pd
import ast

df['encoded_values'] = df['encoded_values'].apply(
    lambda x: [float(num) for num in ast.literal_eval(x)]
)
# 若需转为numpy数组(适合后续数值运算):
# import numpy as np
# df['encoded_values'] = df['encoded_values'].apply(lambda x: np.array(ast.literal_eval(x), dtype=np.float32))

方法2:手动清洗字符串后拆分转换

若字符串格式统一(开头[、结尾],分隔符为空格或逗号),可手动清理后拆分转换:

import pandas as pd

df['encoded_values'] = df['encoded_values'].str.strip('[]') \
                                           .str.replace(',', '') \
                                           .str.split() \
                                           .apply(lambda x: [float(num) for num in x])

方法3:批量转为numpy数组(高效处理大数量数据)

用numpy.fromstring直接解析清洗后的字符串,效率更高:

import pandas as pd
import numpy as np

df['encoded_values'] = df['encoded_values'].apply(
    lambda x: np.fromstring(x.strip('[]'), sep=', ', dtype=np.float32)
)

内容的提问来源于stack exchange,提问作者Badrun Nessa Antu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:05:15