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

如何仅将DataFrame中各symbol的最大asOfDate行写入CSV?

修改后的代码:仅保留每个标的最新季度资产负债表数据
import pandas as pd
from yahooquery import Ticker

symbols = ['AAPL','GOOG','MSFT'] # 实际有75000个标的
header = ["asOfDate","CashAndCashEquivalents","CashFinancial","CurrentAssets","TangibleBookValue","CurrentLiabilities","TotalLiabilitiesNetMinorityInterest"]
# 标记是否为首次写入CSV(用于控制表头输出)
first_write = True

for tick in symbols:
    faang = Ticker(tick)
    # 仅调用一次接口获取数据,避免重复请求浪费资源
    df = faang.balance_sheet(frequency='q')
    
    # 跳过无数据的标的,避免后续代码报错
    if df.empty:
        print(f"标的 {tick} 无季度资产负债表数据,已跳过")
        continue
    
    # 转换日期格式,确保能正确筛选最新数据
    df['asOfDate'] = pd.to_datetime(df['asOfDate'])
    
    # 筛选出当前标的asOfDate最大的一行(即最新季度数据)
    latest_df = df[df['asOfDate'] == df['asOfDate'].max()]
    
    # 补充表头中缺失的列,值设为None
    for column_name in header:
        if column_name not in latest_df.columns:
            latest_df.loc[:, column_name] = None
    
    # 写入CSV:首次写入带表头,后续追加不带表头
    latest_df.to_csv('output.csv', mode='a', index=True, header=first_write, columns=header)
    # 首次写入完成后切换标记
    if first_write:
        first_write = False

关键修改说明

  • 移除重复API调用:原代码连续两次调用balance_sheet接口,保留一次即可,大幅减少网络请求次数(尤其针对75000个标的的场景)。
  • 精准筛选最新数据:将asOfDate转为日期类型后,通过最大值匹配筛选出每个标的的最新季度报告行,确保每个标的仅保留一条数据。
  • 空数据容错处理:增加空DataFrame判断,跳过无资产负债表数据的标的,避免后续逻辑报错。
  • 优化CSV写入逻辑:通过first_write标记控制表头输出,仅在第一次写入时生成表头,避免文件中出现重复表头。

内容的提问来源于stack exchange,提问作者HTMLHelpMe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:10:41