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

遍历DataFrame列表删除首行失败,求原因及解决办法

问题原因与解决方法

嘿,我来帮你排查下代码没生效的原因~

为什么你的代码没起作用?

主要有两个核心问题:

  1. drop方法默认不修改原DataFrame
    你写的df.drop(df.index[0])只是生成了一个删除第一行后的新DataFrame,但并没有把这个结果存回原变量或者更新df_list里的元素。pandas的大部分方法默认都是返回新对象,不会直接修改原数据,除非你指定inplace=True参数。
  2. 循环中的临时引用问题
    在for df in df_list的循环里,df只是列表中每个DataFrame的临时引用。就算你对df做了修改,有时候也无法同步更新到df_list的原位置,导致修改没被保存下来。

修正后的代码方案

这里给你两种可靠的解决方式:

方案1:原地修改(使用inplace=True)

通过索引遍历列表,直接修改原列表中的DataFrame:

for i in range(len(df_list)):
    df = df_list[i]
    # 将第一行设为列名
    df.columns = df.iloc[0]
    # 原地删除第一行,修改原DataFrame
    df.drop(df.index[0], inplace=True)

方案2:创建新列表(更推荐,避免副作用)

这种方式会生成新的DataFrame列表,不会影响原数据,更安全:

processed_df_list = []
for df in df_list:
    # 先把第一行设为列名,再删除第一行
    processed_df = df.rename(columns=df.iloc[0]).drop(df.index[0])
    processed_df_list.append(processed_df)
# 之后直接使用processed_df_list即可

或者用enumerate直接更新原列表:

for idx, df in enumerate(df_list):
    df_list[idx] = df.rename(columns=df.iloc[0]).drop(df.index[0])

效果示例

以你给出的df_list[0]为例,修改后会变成:

Hospital/LocationSpecialty
Maimonides Med Ctr-NYMaimonides Med Ctr-NY Medicine-Preliminary Anesthesiology
Jacobi Med Ctr/Einstein-NYPediatrics
Jacobi Med Ctr/Einstein-NYPediatrics
Temple Univ Hosp-PAInternal Medicine

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:13