Pandas遍历DataFrame无法打印所有行的问题求助
遍历DataFrame仅输出首行问题排查与解决
问题原因分析
你的DataFrame结构显示UPST是列名,后续的股票代码是该列的行数据。这是因为写入CSV时,第一行直接写入了UPST,没有指定列名,导致pd.read_csv默认将第一行识别为列名,后续行作为该列的数值。
而for row in dfcsv:这种循环方式,本质是遍历DataFrame的列名,所以只会输出唯一的列名UPST,而非行数据。
解决方案
步骤1:修正CSV写入逻辑(推荐)
修改写入代码,确保CSV有明确的列名,避免结构混乱:
import os def recalc_stock_2day_rsi(ticker): file_exists = os.path.isfile("output.csv") # 使用with语句自动管理文件关闭,避免手动close的遗漏 with open("output.csv", "a") as output: yf.pdr_override() df = pdr.get_data_yahoo(ticker, start, end) df_close_only = df['Close'] try: rsi = calc_rsi(df_close_only, 2) except AttributeError: rsi = 100 if rsi < 30: # 首次写入时添加列名 if not file_exists or os.path.getsize("output.csv") == 0: output.write("ticker\n") output.write(f"{ticker}\n")
步骤2:正确读取CSV(若不修改写入代码)
如果不想改动写入逻辑,读取时指定无表头并手动设置列名:
import pandas as pd dfcsv = pd.read_csv("output.csv", header=None, names=["ticker"])
步骤3:正确遍历行数据
使用以下任意方式遍历所有股票代码:
- 直接遍历列的数值(最简单):
for ticker in dfcsv['ticker']: print(ticker) - 使用
iterrows()遍历(带索引):for idx, row in dfcsv.iterrows(): print(row['ticker']) - 使用
itertuples()遍历(效率更高):for row in dfcsv.itertuples(): print(row.ticker)
内容的提问来源于stack exchange,提问作者Caio Navarro
相关产品推荐
相关产品推荐

