遍历股票代码列表执行日线重采样出错,求技术排查
问题分析与解决:遍历股票代码列表时的文件名生成错误
我一眼就看出问题出在哪了——你把整个DataFrame直接塞进了SymbolList里,导致遍历的时候拿到的不是单个股票代码,而是整个表格对象,转成字符串自然就会把所有内容都拼进文件名里,系统当然找不到对应的文件啦!
错误根源拆解
你这段代码里的SymbolList.append(read)是核心问题:
read = pd.read_csv('/Users/steve/Documents/MATLAB/all_symbols.csv', header=None, delimiter=',') SymbolList.append(read)
这里的read是一个完整的pandas DataFrame对象,你把它整个添加到列表后,遍历SymbolList时,x就是这个DataFrame,用str(ticker)转换后就会输出整个表格的文本内容,这才生成了那个乱七八糟的文件名。
修正方案
我们需要把DataFrame里的每一个股票代码单独提取出来,变成一个字符串列表,而不是把整个DataFrame塞进去。修改方式很简单:
- 替换列表初始化的代码,直接把DataFrame的第一列转成列表(因为你的csv没有表头,第一列就是股票代码):
SymbolList = read[0].tolist()
- 确保遍历的时候拿到的是单个字符串,不需要额外转成str(不过保险起见可以加个
str())。
修正后的完整代码
import pandas as pd col_names = ['Date','Time','Open','High','Low','Close','Volume','Split Factor','Earnings','Dividends'] # 读取股票代码列表,直接转成字符串列表 read = pd.read_csv('/Users/steve/Documents/MATLAB/all_symbols.csv', header=None, delimiter=',') SymbolList = read[0].tolist() for ticker in SymbolList: # 确保ticker是字符串类型,避免意外 ticker_str = str(ticker) file_path = f'/Users/steve/Documents/MATLAB/SNP500 STOCKS 1 MIN DATA/table_{ticker_str}.csv' try: data = pd.read_csv(file_path, header=None, names=col_names, parse_dates=[['Date', 'Time']]) data['Date_Time'] = pd.to_datetime(data.Date_Time.astype(str),format='%Y%m%d %H%M') data = data.set_index('Date_Time') data_NormalTradingHours = data.between_time('9:30','16:00') data_daily = (data_NormalTradingHours.resample('D') .agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum'})).dropna() output_path = f'/Users/steve/Documents/MATLAB/SNP500 STOCKS 1 MIN DATA/{ticker_str}_D.csv' data_daily.to_csv(output_path, sep=',') print(f"处理完成:{ticker_str}") except FileNotFoundError: print(f"警告:未找到文件 {file_path},跳过该股票")
额外优化点
- 我加了
try-except块来捕获可能的文件不存在错误,这样遇到单个缺失文件时程序不会直接崩溃,还能给出提示。 - 用f-string来拼接路径,比
str()拼接更清晰易读。 - 增加了处理完成的打印提示,方便你跟踪进度。
内容的提问来源于stack exchange,提问作者sslack88
相关产品推荐
相关产品推荐

