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
相关产品推荐
相关产品推荐

