Pandas DataFrame重复列重命名:如何单独修改第二列并调整位置
解决方案
1. 精准重命名第二列
Pandas的rename是按列名匹配,同名列会被一起修改,所以直接操作列名列表是最稳妥的方式:
import pandas as pd # 读取文件(以csv为例,Excel文件替换为pd.read_excel) df = pd.read_csv("你的文件路径") # 获取列名列表 cols = df.columns.tolist() # 找到所有名为"Материал"的列索引,取第二个 mat_cols_idx = [i for i, col_name in enumerate(cols) if col_name == "Материал"] if len(mat_cols_idx) >= 2: # 给第二列重命名为你需要的名称 cols[mat_cols_idx[1]] = "Материал_дополнительный" # 将修改后的列名赋值回DataFrame df.columns = cols
2. 将重命名后的列移到指定位置
假设你要把这列移到第5个位置(索引从0开始,对应target_pos=4):
target_col = "Материал_дополнительный" target_pos = 4 # 自定义目标位置 # 构造新的列顺序 new_cols = df.columns.tolist() # 先移除目标列 new_cols.remove(target_col) # 在指定位置插入目标列 new_cols.insert(target_pos, target_col) # 重新排列DataFrame的列 df = df[new_cols]
3. 批量处理30+文件的完整脚本
把上述逻辑封装成函数,批量处理整个文件夹的文件:
import os import pandas as pd def process_single_file(file_path, new_col_name="Материал_дополнительный", target_pos=4): # 读取文件 df = pd.read_csv(file_path) # Excel文件替换为pd.read_excel(file_path) # 重命名第二列"Материал" cols = df.columns.tolist() mat_cols_idx = [i for i, col_name in enumerate(cols) if col_name == "Материал"] if len(mat_cols_idx) >=2: cols[mat_cols_idx[1]] = new_col_name df.columns = cols # 移动列到指定位置 if new_col_name in df.columns: new_cols = df.columns.tolist() new_cols.remove(new_col_name) new_cols.insert(target_pos, new_col_name) df = df[new_cols] # 保存处理后的文件(原文件名前加processed_前缀) output_filename = f"processed_{os.path.basename(file_path)}" output_path = os.path.join(os.path.dirname(file_path), output_filename) df.to_csv(output_path, index=False) # Excel文件替换为df.to_excel(output_path, index=False) print(f"处理完成:{output_filename}") # 批量处理文件夹内文件 folder_path = "你的文件夹绝对路径" for filename in os.listdir(folder_path): # 过滤目标文件类型,这里以csv为例 if filename.endswith(".csv"): file_full_path = os.path.join(folder_path, filename) process_single_file(file_full_path)
这个方法直接通过列位置精准操作,不用删除再放回,对大文件友好,不会额外占用过多内存。
内容的提问来源于stack exchange,提问作者Legaman
相关产品推荐
相关产品推荐

