You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV数据自动提取并映射至指定矩阵位置?

解决方案

问题分析

你当前代码的核心问题有两个:

  • 行和列的维度搞反了:需求是Sector作为行,Service作为列,但你用service.nunique()作为行数,sector.nunique()作为列数,完全颠倒了维度对应关系。
  • 缺少Sector/Service到矩阵索引的映射关系,无法定位每个数据点在矩阵中的具体位置。

修正代码(基础遍历版)

import numpy as np
import pandas as pd

# 一次性读取整个CSV,避免重复IO操作
df = pd.read_csv('Coeff_Sample.csv')

# 获取唯一的Sector和Service列表,建立索引映射字典
unique_sectors = df['Sector'].unique()
unique_services = df['Service'].unique()

sector_to_idx = {sector: i for i, sector in enumerate(unique_sectors)}
service_to_idx = {service: j for j, service in enumerate(unique_services)}

# 创建正确尺寸的零矩阵:行数=唯一Sector数量,列数=唯一Service数量
coeff_matrix = np.zeros((len(unique_sectors), len(unique_services)))

# 遍历每一行数据,填充矩阵对应位置
for _, row in df.iterrows():
    sector = row['Sector']
    service = row['Service']
    value = row['Data_Point']
    # 通过映射找到行、列索引
    i = sector_to_idx[sector]
    j = service_to_idx[service]
    coeff_matrix[i, j] = value

# 可选:打印验证结果
print("行标签(Sector):", unique_sectors)
print("列标签(Service):", unique_services)
print("\n填充后的矩阵:\n", coeff_matrix)

更简洁的Pandas透视表实现

如果不需要手动操作numpy矩阵,用Pandas的pivot_table可以一步生成目标矩阵,效率更高:

import pandas as pd
import numpy as np

df = pd.read_csv('Coeff_Sample.csv')

# 生成透视表,自动填充数据,缺失位置补0
pivot_df = df.pivot_table(
    index='Sector',
    columns='Service',
    values='Data_Point',
    fill_value=0
)

# 转成numpy矩阵格式
coeff_matrix = pivot_df.to_numpy()

# 查看结果
print("透视表形式:\n", pivot_df)
print("\nNumpy矩阵形式:\n", coeff_matrix)

关键说明

  • 两种方法都会保留Sector和Service的原始出现顺序作为矩阵的行/列顺序;如果需要排序,可在获取unique_sectors和unique_services时加上sorted()。
  • 透视表方法更适合大型CSV文件,Pandas内部做了性能优化,比手动遍历效率更高。

内容的提问来源于stack exchange,提问作者Dr. Merkwürdigliebe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:42:24