如何将一维numpy数组按列拆分为多个对应不同字段的独立数组?
解决方法
你当前代码的核心问题是:读入每行数据时没有按逗号拆分字段,生成的numpy数组是一维字符串数组,每个元素对应一整行未拆分的内容,自然无法按列切片提取字段。
方案1:修改现有代码实现
with open('Tesla.csv') as f: # 读取表头行,拆分得到字段名 header = f.readline().rstrip('\n').split(',') # 剩余每行按逗号拆分后存入列表 mylist = [line.rstrip('\n').split(',') for line in f] import numpy as np # 转换后得到二维numpy数组,维度为 [数据行数, 字段数] np_data = np.array(mylist) # 按列索引提取各字段独立数组 dates = np_data[:, 0] # 日期列 close_last = np_data[:, 1] # Close/Last列(原始带$符号的字符串格式) volume = np_data[:, 2] # 交易量列 open_price = np_data[:, 3] # 开盘价列 high = np_data[:, 4] # 最高价列 low = np_data[:, 5] # 最低价列 # 如果需要把价格、交易量转为数值类型可做如下处理 close_last_num = np.array([float(s.replace('$', '')) for s in close_last]) volume_num = np.array([int(v) for v in volume])
方案2:使用numpy内置方法直接读取CSV(更简洁)
无需手动逐行读文件,调用numpy内置的genfromtxt方法一步完成读取和拆分:
import numpy as np # delimiter指定分隔符为逗号,skip_header=1跳过表头行,dtype=None自动识别数据类型 np_data = np.genfromtxt('Tesla.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1) # 后续按列提取逻辑和方案1完全一致
补充:可视化场景更推荐用pandas读取
如果你后续要做股价可视化,pandas处理表格数据更方便,直接按字段名取数无需记索引:
import pandas as pd df = pd.read_csv('Tesla.csv') # 直接按表头名提取字段,同时可一步完成格式转换 dates = df['Date'].values close_last_num = df['Close/Last'].str.replace('$', '').astype(float).values volume_num = df['Volume'].values
内容的提问来源于stack exchange,提问作者PythProgram52
相关产品推荐
相关产品推荐

