如何使用Python将CSV中的多组键值对转换为指定格式的矩阵
非结构化键值对CSV转矩阵解决方案
实现逻辑
- 先将原始DataFrame中每一组(分组名称+对应数值列)单独拆分为长格式数据
- 合并所有组的长格式数据后,通过透视表转换为目标矩阵,无匹配位置自动填充0
代码实现
假设你读取的原始CSV数据存储在变量raw_df中,执行以下代码即可得到目标结果:
import pandas as pd # 提取所有分组名称(过滤掉CSV读取时自动生成的Unnamed数值列名) group_names = [col for col in raw_df.columns if not col.startswith("Unnamed")] # 逐个处理每个分组的键值数据 long_df_list = [] for group in group_names: # 获取当前分组对应的键列、数值列位置 key_col_idx = raw_df.columns.get_loc(group) value_col_idx = key_col_idx + 1 # 提取当前分组的键值对,去除空行 temp_df = raw_df.iloc[:, [key_col_idx, value_col_idx]].dropna() temp_df.columns = ["item_key", "item_value"] temp_df["group_name"] = group long_df_list.append(temp_df) # 合并所有分组数据,透视转为目标矩阵 full_long_df = pd.concat(long_df_list, ignore_index=True) result_matrix = full_long_df.pivot( index="item_key", columns="group_name", values="item_value" ).fillna(0).astype(int)
结果说明
- 输出的
result_matrix索引就是所有唯一键(ABCGD、KANSL等),列名就是原始分组(PL1、AL1等),数值完全符合要求的格式 - 如果需要把索引转为普通列,可在末尾追加代码:
result_matrix = result_matrix.reset_index()
内容的提问来源于stack exchange,提问作者Rebechrife
相关产品推荐
相关产品推荐

