调用自定义remove_extrachar方法处理Pandas DataFrame未生效求助
问题原因与解决方案
问题根源
你写的remove_extrachar函数里,df1 = df1.apply(...)这行代码是创建了一个新的DataFrame对象,然后把函数内部的局部变量df1指向这个新对象。但外部调用时传入的原始df1变量,依然指向原来未处理的旧对象——这就是为什么函数内部打印能看到处理后的结果,外部调用后却没效果的核心原因。
解决办法
方案1:返回处理后的新DataFrame(推荐)
修改函数让它返回处理好的两个DataFrame,在调用时接收返回值:
def remove_extrachar(df1, df2): df1_processed = df1.apply(lambda x: x.astype(str).str.lower().str.replace('-', '')) df2_processed = df2.apply(lambda x: x.astype(str).str.lower().str.replace('-', '')) return df1_processed, df2_processed def compare(df1, df2): # 接收处理后的DataFrame,覆盖原变量 df1, df2 = remove_extrachar(df1, df2) compare_result = pd.merge(df1, df2, on='name', how='outer') return compare_result
这种方式不会修改原始的DataFrame,避免了意外的副作用,是最安全的做法。
方案2:直接修改原始DataFrame内容(不推荐)
如果确定不需要保留原始数据,可以直接修改传入的DataFrame的列值,而不是重新赋值:
def remove_extrachar(df1, df2): # 遍历每一列,原地修改内容 for col in df1.columns: df1[col] = df1[col].astype(str).str.lower().str.replace('-', '') for col in df2.columns: df2[col] = df2[col].astype(str).str.lower().str.replace('-', '') def compare(df1, df2): remove_extrachar(df1, df2) compare_result = pd.merge(df1, df2, on='name', how='outer') return compare_result
注意:这种方式会直接改变传入的原始DataFrame,如果后续代码还需要用到未处理的数据,会引发问题。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

