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

Python中如何转换CSV单元格内字符串格式的数字数组?

解决ndarray中字符串格式数组转数值数组的问题

这问题我之前处理过,核心原因是你拿到的p[1:2]里的元素其实是带方括号、换行符的字符串格式数组文本,不是直接可转换的单个数值,所以np.asfarray和pd.to_numeric会报错——它们没法直接解析这种整体的数组字符串。

咱们可以通过「提取字符串→清理格式→转换数值」三步解决,这里给两种实用方法:

方法1:字符串手动清理分割

适合格式规整的场景,直接处理字符串的括号、换行和空格:

import numpy as np

# 你的原始数据
p = np.array([['[0.7856142 0.77921445 0.8273963 0.86992871 0.82833104 0.80677249\n 0.8410951 0.90299239 0.82401068 0.78761172 0.81294067 0.81446944]']], dtype=object)

# 1. 提取出目标字符串(因为p[1:2]是二维数组,先扁平化再取第一个元素)
target_str = p[1:2].flatten()[0]

# 2. 清理格式:去掉前后方括号、换行符,再去除多余空格
cleaned_str = target_str.strip('[]').replace('\n', ' ').strip()

# 3. 按空格分割成单个数字字符串,再转成float数组
numeric_array = np.array(cleaned_str.split(), dtype=np.float64)

print(numeric_array)

方法2:正则表达式提取数字(更鲁棒)

如果字符串里混有其他无关字符,用正则提取所有浮点数会更可靠,还支持负数:

import numpy as np
import re

# 同样的原始数据
p = np.array([['[0.7856142 0.77921445 0.8273963 0.86992871 0.82833104 0.80677249\n 0.8410951 0.90299239 0.82401068 0.78761172 0.81294067 0.81446944]']], dtype=object)

target_str = p[1:2].flatten()[0]

# 用正则匹配所有浮点数(包括负数)
num_str_list = re.findall(r'-?\d+\.\d+', target_str)

# 转成数值数组
numeric_array = np.array(num_str_list, dtype=np.float64)

print(numeric_array)

运行后你就能得到合法的float64类型数组了,两种方法都能解决你的TypeError问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:06:49