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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:58:34