Python读取首列含空格的空格分隔文本文件并转为NumPy数组问题问询
解决思路
方案1:逐行预处理后转NumPy数组
该方法灵活度最高,完美适配第一列含任意空格的场景:
- 读取文件时直接跳过首行,逐行处理剩余内容
- 对每一行内容从右向左拆分4次,得到5个片段,拆分后最左侧的片段全部归为第一列内容,不会把第一列内部的空格判定为分隔符
- 科学计数法格式的字符串直接用
float()即可转换为普通数值,若需要NumPy打印时不显示科学计数法可单独配置打印参数 - 最后分别拼装5列数据为NumPy数组
import numpy as np # 初始化5列的存储列表 col1, col2, col3, col4, col5 = [], [], [], [], [] with open("替换为你的文件路径.txt", "r", encoding="utf-8") as f: # 跳过第一行表头 next(f) for line in f: line = line.strip() if not line: continue # 从右往左拆分4次,避免拆分第一列内部的空格 parts = line.rsplit(maxsplit=4) col1.append(parts[0]) # 后续4列自动解析科学计数法为普通数值 col2.append(float(parts[1])) col3.append(float(parts[2])) col4.append(float(parts[3])) col5.append(float(parts[4])) # 转换为NumPy数组 col1_arr = np.array(col1, dtype=str) col2_arr = np.array(col2) col3_arr = np.array(col3) col4_arr = np.array(col4) col5_arr = np.array(col5) # 配置NumPy打印时不显示科学计数法 np.set_printoptions(suppress=True)
方案2:修正pandas读取参数
之前读取失败是因为默认会把所有空格判定为分隔符,调整分隔符规则即可:
- 用正则表达式作为分隔符,仅匹配「后面紧跟数字的空格」作为列分隔符,不会拆分第一列中后面是文本的空格
- 配置
skiprows=1跳过首行,pandas会自动把科学计数法解析为普通float类型 - 读取完成后直接调用
to_numpy()方法转为NumPy数组
import pandas as pd import numpy as np df = pd.read_csv( "替换为你的文件路径.txt", sep=r"\s+(?=\d)", # 仅匹配后面为数字的空格作为分隔符 skiprows=1, engine="python", names=["第一列名称", "第二列名称", "第三列名称", "第四列名称", "第五列名称"] ) # 分别转为NumPy数组 col1_arr = df["第一列名称"].to_numpy() col2_arr = df["第二列名称"].to_numpy() col3_arr = df["第三列名称"].to_numpy() col4_arr = df["第四列名称"].to_numpy() col5_arr = df["第五列名称"].to_numpy() # 配置NumPy打印时不显示科学计数法 np.set_printoptions(suppress=True)
内容的提问来源于stack exchange,提问作者Sherwin R
相关产品推荐
相关产品推荐

