Pandas DataFrame中set_index与reset_index方法不生效问题排查
问题分析与解决
核心原因
Pandas里的reset_index()和set_index()默认不会直接修改原DataFrame,而是返回一个修改后的新对象。你只调用了方法但没把结果存回原变量,也没启用原地修改参数,所以原df完全没变化。
解决方法1:重新赋值给原变量
把方法返回的新DataFrame赋值给原变量,这样就能更新原数据:
import numpy as np import pandas as pd np.random.seed(121) randArr =np.random.randint(0,100,20).reshape(5,4) df =pd.DataFrame(randArr,np.arange(101,106,1),['PDS','Algo','SE','INS']) df.index.name='RollNo' print(df) print("") # 重置索引并赋值回原变量 df = df.reset_index() print(df) print("") # 设置新索引并赋值回原变量 df = df.set_index('PDS') print(df) print("")
解决方法2:使用inplace=True原地修改
给方法加上inplace=True参数,直接修改原DataFrame,不用额外赋值:
import numpy as np import pandas as pd np.random.seed(121) randArr =np.random.randint(0,100,20).reshape(5,4) df =pd.DataFrame(randArr,np.arange(101,106,1),['PDS','Algo','SE','INS']) df.index.name='RollNo' print(df) print("") # 原地重置索引 df.reset_index(inplace=True) print(df) print("") # 原地设置新索引 df.set_index('PDS', inplace=True) print(df) print("")
两种方式的区别
- 重新赋值:更安全,不会意外修改原数据,适合需要保留初始DataFrame的场景。
- 原地修改:直接操作原对象,节省内存,适合不需要保留原始数据的场景。
内容的提问来源于stack exchange,提问作者Subrata Biswas
相关产品推荐
相关产品推荐

