无法将分组数据转为numpy数组,报KeyError:'Số'错误
问题分析与解决办法
错误根源
你的CSV实际列名是Ngày(Date)和Số(Number),但代码里全程用"Số"作为列名,完全不匹配,这才触发了KeyError。另外分组后的apply操作已经返回列表,后续的eval属于多余操作,反而可能引发额外问题。
修正步骤
- 统一列名:要么直接使用原始列名
Số(Number)操作,要么提前把列名重命名为更简洁的Số,避免后续混淆。 - 简化分组逻辑,去掉不必要的
eval步骤。
完整修正代码
import numpy as np import pandas as pd # 读取CSV文件,指定编码和分隔符 df = pd.read_csv("C:/Users/Admin/lonum_fixed.csv", encoding="utf-8", sep=",") # 去除列名前后可能存在的空格 df.columns = df.columns.str.strip() # 方案1:直接使用原始列名进行分组,并指定结果列名 grouped_data = df.groupby("Ngày(Date)")["Số(Number)"].apply(lambda x: x.astype(int).tolist()).reset_index(name="Số") # 方案2:先重命名列名再分组(更简洁) # df.rename(columns={"Ngày(Date)": "Ngày", "Số(Number)": "Số"}, inplace=True) # grouped_data = df.groupby("Ngày")["Số"].apply(lambda x: x.astype(int).tolist()).reset_index() # 生成所需数据矩阵 data_matrix = np.array(grouped_data["Số"].tolist())
额外说明
- 用
x.astype(int).tolist()转换列表比list(map(int, x.values))更简洁高效。 reset_index(name="Số")可以直接指定分组后的结果列名,避免groupby操作后生成默认的匿名列,这也是之前可能导致列名混乱的潜在原因。
内容的提问来源于stack exchange,提问作者gialociubc
相关产品推荐
相关产品推荐

