解决Pandas中DataFrame赋值后意外覆盖的问题
问题原因
在Python里,Pandas的DataFrame属于引用类型,直接用df_freq = new_df这类赋值操作,并没有生成新的独立DataFrame,只是给原DataFrame对象多了一个"别名"。后续修改new_df_binary时,本质是在修改同一块内存里的原对象,所以df_freq也会跟着变成二进制数据。
解决方法
用DataFrame的.copy()方法创建深拷贝,生成完全独立的新对象,这样修改其中一个不会影响另一个。
修正后的完整代码
# 1. 赋值频次DataFrame:创建深拷贝,保留原频次数据 df_freq = new_df.copy() # 2. 创建二进制DataFrame:先深拷贝原数据,再做二进制转换 numeric_cols = new_df.select_dtypes("number", exclude='float64').columns.tolist() new_df_binary = new_df.copy() # 注意:原DataFrame列名为text_len,修正为对应列名 new_df_binary['text_len'] = new_df_binary['text_len'].astype(int) new_df_binary[numeric_cols] = (new_df_binary[numeric_cols] > 0).astype(int)
这样操作后,df_freq会完整保留原始的频次数据,new_df_binary则是转换后的二进制数据,两者完全独立,互不干扰。
内容的提问来源于stack exchange,提问作者Kas
相关产品推荐
相关产品推荐

