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

如何使用函数原地(inplace)修改多个同结构的Pandas DataFrame?

如何原地修改多个Pandas DataFrame并保存转换

虚拟DataFrame示例

先定义两个结构一致的DataFrame:

import pandas as pd

df = pd.DataFrame({
    "Full name": ["John Doe","Deep Smith","Julia Carter","Kate Newton","Sandy Thompson"], 
    "Monthly Sales": [25,30,35,40,45]
}) 

df2 = pd.DataFrame({
    "Full name": ["Alicia Williams","Kriten John","Jessica Adams","Isaac Newton","Whitney Gordon"], 
    "Monthly Sales": [35,20,50,15,40]
})

原函数的问题

你原本的函数无法实现原地修改,核心问题是操作都是对局部变量df重新赋值,没有改动原始传入的DataFrame对象:

def tidy_dfs(dfs):
    for df in dfs:
        # Drop first row
        df = df.iloc[1: , :]  # 仅给局部变量赋值新切片,原DataFrame无变化
        # Replace spaces in columns
        df.columns = [c.replace(' ', '_') for c in df]  # 修改的是新切片的列名,与原对象无关
        # change cols to lower
        df.columns = [c.lower() for c in df]
    return df

即便用df,df2 = tidy_dfs([df,df2])也无效,因为循环内的操作从未影响原始DataFrame。

修改后的原地修改函数

要实现原地修改,需直接对原DataFrame对象执行操作:

  • 删除首行:用drop方法并设置inplace=True,直接修改原对象
  • 修改列名:直接修改原df的columns属性(它是可变对象,修改会同步到原DataFrame)

修改后的函数:

def tidy_dfs(dfs):
    for df in dfs:
        # 原地删除第一行
        df.drop(df.index[0], inplace=True)
        # 原地替换列名空格并转为小写
        df.columns = [c.replace(' ', '_').lower() for c in df.columns]

调用验证

直接传入DataFrame列表即可完成原地修改:

tidy_dfs([df, df2])

此时查看df和df2会发现:

  • 首行已被删除
  • 列名从Full name变为full_name,Monthly Sales变为monthly_sales

内容的提问来源于stack exchange,提问作者Mohamed Mostafa El-Sayyad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:15:38