Pandas DataFrame列重命名失败问题及原因排查问询
问题原因与解决方案
问题根源
你用agg({'Views(in millions)': ['mean']})生成的DataFrame是多级列名(MultiIndex),合并后的目标列名是元组类型:('Views(in millions)', 'mean'),而不是你以为的字符串'(Views(in millions), mean)'。用字符串作为键去匹配元组列名,Pandas找不到对应列,所以重命名操作完全没生效。
三种解决办法
1. 从源头避免多级列(推荐)
在agg的时候直接指定聚合后的列名,不用列表形式,这样不会生成多级列:
avg_views_per_month = video_data.groupby('Month', as_index=False).agg( Views=('Views(in millions)', 'mean') # 直接定义列名为Views )
这样生成的avg_views_per_month列名就是Month和Views,后续合并后无需额外重命名。
2. 用元组作为键重命名
如果已经生成了多级列,直接用元组匹配列名:
avg_views_per_video_by_month.rename( columns={('Views(in millions)', 'mean'): 'Views'}, inplace=True )
这样就能精准匹配到目标列,完成重命名。
3. 扁平化多级列名
把多级列名转成普通字符串,之后再用字符串重命名:
# 把多级列名转成拼接后的字符串 avg_views_per_video_by_month.columns = ['_'.join(col).strip() for col in avg_views_per_video_by_month.columns] # 现在可以用字符串重命名了 avg_views_per_video_by_month.rename( columns={'Views(in millions)_mean': 'Views'}, inplace=True )
内容的提问来源于stack exchange,提问作者Tanush S
相关产品推荐
相关产品推荐

