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

Python新手求助:不使用Pandas从CSV股票价格文件中提取指定列

Python新手求助:不使用Pandas从CSV股票价格文件中提取指定列

嘿,别慌!这问题其实很好搞定~先说说你现有代码的小问题:你用csv.DictReader的思路没问题,但只是把整行的所有数据都塞进列表里了,没做列的筛选。我给你两种修改方案,按需选就行!

方案一:基于你原代码的DictReader改进(按列名提取)

你的CSV表头是date, opening, high, low, close, adj. close, volume,DictReader会把每一行转成以表头为键的字典,咱们只要精准取出需要的键值对就好。另外我还帮你修正了函数参数和文件名变量的小bug:

import csv  # 别忘了导入csv模块哦!

def read_daily_prices(symbol):
    daily_prices = []
    with open(f"{symbol}.csv", "r", newline='') as csvfile:
        csvreader = csv.DictReader(csvfile, delimiter=',')
        for row in csvreader:
            # 只提取你需要的三列,键名要和CSV表头完全匹配
            selected_data = {
                'date': row['date'],
                'opening': row['opening'],
                'close': row['close']
            }
            daily_prices.append(selected_data)
    return daily_prices

这样返回的daily_prices是一个字典列表,每个字典只包含日期、开盘价和收盘价。要是你的CSV表头有大小写差异(比如是Date而非date),记得把row里的键名改成对应的就行。

方案二:用csv.reader按列位置提取

如果你确定列的固定位置(你说第1列是日期、第2列开盘、第5列收盘),可以用这种更直接的方法,完全不依赖列名:

import csv

def read_daily_prices(symbol):
    daily_prices = []
    with open(f"{symbol}.csv", "r", newline='') as csvfile:
        csvreader = csv.reader(csvfile, delimiter=',')
        next(csvreader)  # 跳过表头行,不然会把表头也混进数据里
        for row in csvreader:
            # 注意csv的索引从0开始,所以第1列对应索引0,第5列对应索引4
            date = row[0]
            opening = row[1]
            close = row[4]
            # 这里可以返回列表格式,也改成字典,看你后续需求
            daily_prices.append([date, opening, close])
    return daily_prices

这个方法更稳妥,哪怕表头名称变了,只要列的位置不变就能正常提取数据。

你原来的代码只是把整行数据都保留了,按上面的方法修改后,就只留下你需要的三个列的内容啦~

备注:内容来源于stack exchange,提问作者diamondsndrama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:15:27