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

修改Pandas DataFrame未保留指定列且原变量未更新问题求助

问题原因
  • 你代码中df = df[['Latitude','Longitude','temp']]是生成了一个新的DataFrame对象,仅将函数内的局部变量df指向这个新对象,并不会修改传入的原始DataFrame对象本身
  • 列表推导式中你将函数返回的新DataFrame替换了weather_list的原有元素,因此列表内的是处理完成的新对象,但你外部定义的独立DataFrame变量仍然指向未被修改的旧对象,所以出现数据不同步的问题
  • 如果你打印weather_list内任意DataFrame的列名,会发现已经仅保留了目标三列,所谓“无法删除datetime列”实际是你查看了外部未更新的旧变量导致的误解
解决方案

方案1:直接修改原始DataFrame对象(实现列表、外部变量同步更新)

修改函数逻辑,直接在原对象上做修改而非生成新对象:

def meantemp(df):
    # 计算平均温度,直接修改原df
    df['temp'] = df.iloc[:, 2:].mean(axis=1)
    # 在原对象上直接删除非目标列,修改会同步到所有引用该对象的变量
    df.drop(columns=df.columns.difference(['Latitude','Longitude','temp']), inplace=True)
    return df

# 执行处理,此时列表内元素和外部原始df变量都会同步更新
weather_list = [df.pipe(meantemp) for df in weather_list]

方案2:处理后单独赋值回外部变量

如果不想修改原对象,可在列表处理完成后将结果解包赋值给你需要单独使用的变量:

# 原有处理逻辑不变
def meantemp(df):
    df['temp'] = df.iloc[ : , 2:].mean(axis = 1)
    df = df[['Latitude','Longitude','temp']]
    return df

weather_list = [df.pipe(meantemp) for df in weather_list]

# 假设你原来的独立变量是df1、df2、df3,按顺序解包赋值即可
df1, df2, df3 = weather_list

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 09:36:03