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

Python循环中将DataFrame首行复制到新DataFrame的实现问题

问题原因

你的代码里每次循环都会重新创建空的df_4,也就是df_4 = pd.DataFrame()这行放在循环内部,导致每次循环都会清空之前的df_4,最终只能保留最后一次循环的结果,前面的所有数据都被覆盖了。

解决方法

以下两种方案都能解决问题,第二种在数据量较大时效率更高:

方案一:提前初始化df_4,循环内追加数据

把空DataFrame的初始化移到循环外面,每次循环直接向同一个df_4中追加内容:

import pandas as pd
import yfinance as yf

df = pd.read_excel(r'C:\Users\vikto\OneDrive\Skrivbord\Python\symbols2.xlsx')
mylist = df['Symbols'].tolist()

# 提前初始化空DataFrame
df_4 = pd.DataFrame()

for item in mylist:
    ticker = yf.Ticker(item)
    df_1 = pd.DataFrame(ticker.earnings)

    df_2 = pd.DataFrame(ticker.quarterly_earnings)
    df_2.loc['proforma'] = df_2.sum(numeric_only=True, axis=0)
    df_2 = df_2.iloc[-1:]

    df_3 = pd.concat([df_1, df_2])
    df_3 = df_3.transpose()
    df_3 = df_3.loc[:, ::-1]

    # 用pd.concat替代已弃用的append方法
    df_4 = pd.concat([df_4, df_3.head(1)])

方案二:先收集所有子DataFrame,最后一次性合并

通过列表临时存储每次处理后的首行数据,最后统一合并,避免循环内频繁修改df_4带来的性能损耗:

import pandas as pd
import yfinance as yf

df = pd.read_excel(r'C:\Users\vikto\OneDrive\Skrivbord\Python\symbols2.xlsx')
mylist = df['Symbols'].tolist()

# 用列表存储所有处理后的子DataFrame
temp_dfs = []

for item in mylist:
    ticker = yf.Ticker(item)
    df_1 = pd.DataFrame(ticker.earnings)

    df_2 = pd.DataFrame(ticker.quarterly_earnings)
    df_2.loc['proforma'] = df_2.sum(numeric_only=True, axis=0)
    df_2 = df_2.iloc[-1:]

    df_3 = pd.concat([df_1, df_2])
    df_3 = df_3.transpose()
    df_3 = df_3.loc[:, ::-1]

    # 将首行加入临时列表
    temp_dfs.append(df_3.head(1))

# 最后一次性合并所有子DataFrame
df_4 = pd.concat(temp_dfs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:05:15