for循环批量重命名多个DataFrame列出现堆叠重复列问题
问题根因
重复列是列表推导式写法错误导致的:
- 推导式循环中你每次返回的是整个处理完成的列名Index对象,而非单个处理后的列名,最终赋值给
df.columns的是长度等于原列数、每个元素都是完整列名序列的列表,直接造成列名重复堆叠。 - 举个直观例子:如果原列是
['User Name', 'Age Group'],你的写法运行后会生成[Index(['user_name', 'age_group']), Index(['user_name', 'age_group'])],赋值后列结构完全异常。
修正代码
pandas的.str是向量化操作,本身就会直接返回处理好的完整列名序列,不需要套列表推导式循环,直接赋值即可:
df_names = ('castaways', 'challenge_description', 'challenge_results') for df_name in df_names: df = globals()[df_name] df.columns = df.columns.str.replace(' ', '_').str.lower()
如果偏好列表推导式写法,要保证每次循环处理单个列名,不要对整个columns对象重复做全局处理:
df_names = ('castaways', 'challenge_description', 'challenge_results') for df_name in df_names: df = globals()[df_name] df.columns = [col_name.replace(' ', '_').lower() for col_name in df.columns]
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

