为何Pandas DataFrame的重索引与重置索引操作未生效?
问题分析与修复方案
1. reindex操作未生效
df.reindex(index=df.index[::-1])默认返回新的DataFrame副本,不会修改原对象。要让修改生效,有两种方式:
# 方式1:使用inplace参数直接修改原对象 df.reindex(index=df.index[::-1], inplace=True) # 方式2:将返回的新DataFrame重新赋值给df df = df.reindex(index=df.index[::-1])
2. reset_index操作被覆盖
执行df.reset_index(inplace=True, drop=True)后,紧接着用df.index = pd.to_datetime(...)替换了索引,导致reset_index的效果被完全抵消。如果确实需要先重置索引再设置日期索引,这两步顺序没问题,但要明确重置后的索引会被覆盖;如果不需要重置索引,可直接删除这一步。
3. 返回值错误
df.drop(..., inplace=True)时,方法返回None,所以transformed_df实际是None,而非处理后的DataFrame。正确做法是去掉inplace=True,直接将结果赋值给变量:
transformed_df = df.drop(['areaCode', 'areaName', 'areaType', 'Date'], axis=1)
修正后的完整代码
import pandas as pd def apply_transformation(df): # 重命名列 df.rename(columns={"date" : "Date", "Wrong_name": "Correct_name"}, inplace=True) # 反转DataFrame df = df.reindex(index=df.index[::-1]) # 设置日期索引(若无需重置索引,可删除下面注释的行) # df.reset_index(inplace=True, drop=True) df.index = pd.to_datetime(df['Date'], format='%Y-%m-%d') # 删除指定列并赋值 transformed_df = df.drop(['areaCode', 'areaName', 'areaType', 'Date'], axis=1) return transformed_df
内容的提问来源于stack exchange,提问作者Ádám Szalóczi
相关产品推荐
相关产品推荐

