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

