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

如何在使用glob批量追加列的for循环中修改多列表头?

问题根源与解决方案

你遇到的核心问题是**pandas.DataFrame.rename()默认不会修改原DataFrame**——它会返回一个修改后的新DataFrame对象,但你在循环里既没有把这个返回值重新赋值给df,也没有使用inplace=True参数来直接修改原对象,所以原DataFrame的列名根本没发生变化,导致后续追加的列还是原来的名字。

两种直接修复方式

方式1:使用inplace=True参数直接修改原DataFrame

在rename时加上这个参数,让修改直接作用于当前的df:

df.rename(columns={"cases7_lk": "cases7_lk_" + base}, inplace=True)

方式2:将修改后的新DataFrame重新赋值给df

如果你不想修改原对象(比如后续还要用原列名),可以把返回的新对象存回df:

df = df.rename(columns={"cases7_lk": "cases7_lk_" + base})

更高效的优化方案

其实你只需要提取cases7_lk这一列,没必要修改整个DataFrame的列名。可以直接对Series进行重命名,代码更简洁高效:

import os
import glob
import pandas as pd

path = r'C:\Users\....\Daten'
all_files = glob.glob(path + "/*.csv")
li = []

# 从第一个文件提取RS列作为索引(避免硬编码特定文件)
first_df = pd.read_csv(all_files[0])
li.append(first_df["RS"])

for filename in all_files:
    df = pd.read_csv(filename)
    # 提取文件名中的日期部分
    file_base = os.path.splitext(os.path.basename(filename))[0].split('_')[3]
    # 直接重命名Series后加入列表
    renamed_series = df["cases7_lk"].rename(f"cases7_lk_{file_base}")
    li.append(renamed_series)

# 合并所有列并设置索引
incidences_complete = pd.concat(li, axis=1).set_index("RS")
display(incidences_complete)

补充说明

你提到循环外rename能正常工作,大概率是因为你在循环外无意间做了赋值操作(比如df = df.rename(...)),而循环里漏掉了这一步,导致修改没有生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:32:47