如何在Python中将DataFrame指定列按规则转换为行
处理CSV列转行(重复列组转多行)
实现思路
你的需求本质是把按列分组存储的候选人数据转成按行存储,每组固定6个字段,用统一列名。用Pandas可以快速实现,步骤如下:
代码实现
import pandas as pd # 1. 读取原始CSV文件 df = pd.read_csv('原始数据.csv') # 2. 定义目标列名(统一用你指定的列名) target_cols = ['N°Panneau', 'Sexe', 'Prénom_Nom_Cand', 'Voix', '% Voix/Ins', '% Voix/Exp'] # 3. 按每6列一组拆分所有列(因为每组固定6个字段) column_groups = [df.columns[i:i+6] for i in range(0, len(df.columns), 6)] # 4. 遍历每个列组,重命名并收集数据 processed_data = [] for cols in column_groups: # 提取当前组的列,并重命名为目标列名 group_df = df[cols].copy() group_df.columns = target_cols # 过滤掉无候选人姓名的无效行(可选,根据你的数据情况调整) group_df = group_df.dropna(subset=['Prénom_Nom_Cand']) processed_data.append(group_df) # 5. 合并所有组的数据,生成最终结果 final_df = pd.concat(processed_data, ignore_index=True) # 6. 保存转换后的CSV final_df.to_csv('转换后数据.csv', index=False)
关键说明
- 不管原始列组的列名是
col_xxx还是其他,只要是每6列对应一个候选人的完整数据,就能被正确拆分和重命名。 - 如果原始数据的列数不是6的整数倍,最后一组不足6列的部分会被自动忽略(你可以根据实际情况调整拆分逻辑)。
dropna步骤是可选的,如果你的数据里存在空的候选人行,可以用这一步过滤掉;如果不需要过滤,直接删掉该行即可。
内容的提问来源于stack exchange,提问作者Tokoro-San
相关产品推荐
相关产品推荐

