创建修改DataFrame特定列行值的函数失效问题排查
问题根源与解决办法
你的rename函数没生效的核心原因是没有把修改后的DataFrame传递回外部:
在函数内部执行df = df.replace(...)时,只是创建了一个新的DataFrame对象,并把函数内部的局部变量df指向这个新对象,但外部的原DataFrame完全没被改变。而你在函数外直接写nfl_07 = nfl_07.replace(...)时,是把新生成的DataFrame重新赋值给了原变量nfl_07,所以能看到修改效果。
有两种简单的修复方式:
方式一:返回修改后的DataFrame
在函数末尾添加return语句,把新生成的DataFrame返回,调用时接收这个返回值:
def rename(df): df = df.replace({'Team': {'NewEngland' : 'Patriots', 'GreenBay' : 'Packers', # 其余球队映射省略 'Tampa' : 'Buccaneers' }}) return df # 关键:返回处理后的DataFrame
调用示例:
nfl_07 = rename(nfl_07) nfl_08 = rename(nfl_08)
方式二:使用inplace=True原地修改
给replace方法加上inplace=True参数,直接在原DataFrame上修改,不需要返回值:
def rename(df): df.replace({'Team': {'NewEngland' : 'Patriots', 'GreenBay' : 'Packers', # 其余球队映射省略 'Tampa' : 'Buccaneers' }}, inplace=True)
调用示例:
rename(nfl_07) # 直接修改原nfl_07 rename(nfl_08)
两种方式的小区别
- 方式一不会修改原DataFrame,而是返回新对象,更安全,能避免意外覆盖原数据;
- 方式二直接修改原对象,节省内存,但如果后续还需要原数据的话要谨慎使用。
内容的提问来源于stack exchange,提问作者Akorts
相关产品推荐
相关产品推荐

