为何Pandas类DataFrame赋值局部变量处理结果后仅保留单列?
Pandas操作差异的原因与解决办法
核心问题出在
self.df_ImportData的初始化环节:第二种操作里,你在给self.df_ImportData['People Resource Name']赋值前,没有把临时DataFrame的完整数据同步给它。如果self.df_ImportData一开始是空的或者未包含完整列,直接赋值单列时,Pandas会自动创建一个仅包含该列的新DataFrame,覆盖掉原来的类成员变量,最终就只剩这一列。两种操作的逻辑对比:
- 第一种操作:直接把Excel的完整数据读入
self.df_ImportData,此时它本身就包含所有列,你只是修改其中一列的值,其他列自然会被保留。 - 第二种操作:你把完整数据读进了临时变量
df_Temp,但没将df_Temp的全部内容赋值给self.df_ImportData,直接去给self.df_ImportData的某一列赋值,这相当于让Pandas生成一个只有目标列的新DataFrame,替换掉原本的self.df_ImportData。
- 第一种操作:直接把Excel的完整数据读入
正确的处理方式:
如果要使用临时变量处理数据,需要先把完整数据同步到类成员,再修改列:df_Temp = pd.read_excel("你的文件路径.xlsx") # 先将完整数据复制给类成员(用copy避免后续修改互相影响) self.df_ImportData = df_Temp.copy() # 再对目标列进行处理赋值 self.df_ImportData['People Resource Name'] = 你的列处理逻辑(df_Temp['People Resource Name'])或者直接在临时变量里处理完所有列,再整体赋值给类成员:
df_Temp = pd.read_excel("你的文件路径.xlsx") # 先在临时变量里处理目标列 df_Temp['People Resource Name'] = 你的列处理逻辑(df_Temp['People Resource Name']) # 再把完整的处理后数据赋值给类成员 self.df_ImportData = df_Temp.copy()
内容的提问来源于stack exchange,提问作者Jim Rutter
相关产品推荐
相关产品推荐

