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

Pandas按GICS拆分DataFrame后循环导出csv内容全部相同问题求解

问题核心原因

  • 你在拆分数据集的循环里,没有操作当前分组对应的dataset,反而每次都调用全量数据集data生成long_dataset,该变量最终只会保留全量数据,导致后续所有宽表转换都基于全量数据,输出文件内容完全一致。
  • 你没有初始化存储最终宽表的字典,每次循环直接覆盖final_datasets变量,最终只会保留最后一个板块的处理结果。

修复方案

直接合并拆分、去列、转宽表的逻辑,不需要额外写拆分的循环,同时初始化字典存储所有处理后的板块数据集:

import pandas as pd
import yfinance as yf
import numpy as np

# 原有数据下载逻辑保持不变
source=pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
df = pd.DataFrame(source[0])
tickers_symbols=df['Symbol'].values.tolist()
GICS_sectors = df['GICS Sector'].values.tolist()
data = pd.DataFrame()
for t,s in zip(tickers_symbols, GICS_sectors):
    tmp = yf.download(t, period='1y', progress=False)
    tmp.reset_index(inplace=True)
    tmp['Ticker'] = t
    tmp['GICS'] = s
    # append方法已被pandas弃用,替换为concat避免版本兼容报错
    data = pd.concat([data, tmp], ignore_index=True)
##KEEP ONLY OPENING PRICE##
data=data.drop(["Close", "High", "Low", "Adj Close", "Volume"], axis=1)

# 初始化存储最终处理结果的字典
final_datasets = {}
## 按GICS分组处理
for sector, dataset in data.groupby('GICS'):
    # 直接处理当前分组的数据集
    wide_df = dataset.drop(columns='GICS', axis=1).pivot_table(index="Date", columns="Ticker", values="Open")
    # 存入字典,后续可通过final_datasets['GICS板块名']调用对应数据集
    final_datasets[sector] = wide_df
    # 保存为csv文件
    wide_df.to_csv(f'{sector} DataFrame.csv', index=True, sep=',')

补充说明

不需要提前把groupby结果转成字典再遍历,直接对data.groupby('GICS')遍历即可,可减少不必要的内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:06:03