如何将带表头的文本文件中的表格数据保存为二维NumPy数组
解决文本文件转二维NumPy数组的问题
我来帮你梳理下问题所在,然后给出修复方案:
为什么你的代码没达到预期?
第一个版本的问题
你第一次的代码里,items.append(line.strip())只是把每行的字符串(去掉首尾空格和换行)添加到列表里,最后转成的数组是一维字符串数组——每个元素是整行的内容,不是拆分后的单个字段,所以不是你想要的二维结构。
第二个版本的问题
第二次尝试中,你在循环里每次都执行species = np.array(line),这相当于每次都用当前行的字符重新创建一个数组,覆盖了之前的变量。循环结束后,自然只保留最后一行的结果。
正确的实现方式
我们需要把每行拆分成单个元素(水果名+三个价格),再组成二维结构。这里有两种常用方法:
方法1:手动处理每行(灵活可控)
import numpy as np def fruits(): items = [] with open('prices.txt', 'r') as data: # 跳过前两行表头 for line in data.readlines()[2:]: # 按空格分割每行,得到[水果名, 价格1, 价格2, 价格3]的列表 split_line = line.strip().split() # 把价格字符串转成浮点型(可选,根据需求调整) split_line[1:] = [float(price) for price in split_line[1:]] items.append(split_line) # 转成二维NumPy数组 species = np.array(items) return species
方法2:用NumPy内置函数(简洁高效)
如果文件格式规整,直接用np.loadtxt跳过表头即可:
import numpy as np def fruits(): # skiprows=2 跳过前两行表头,dtype=object 支持混合字符串和数值类型 species = np.loadtxt('prices.txt', skiprows=2, dtype=object) # 可选:把价格列转成浮点型 species[:, 1:] = species[:, 1:].astype(float) return species
运行任意一种方法,你都会得到一个形状为(4,4)的二维数组,每行对应文件里的一行数据,每列对应水果名和不同供应商的价格。
内容的提问来源于stack exchange,提问作者user175924
相关产品推荐
相关产品推荐

