如何将pandas DataFrame行转为numpy数组逐行处理并解决NameError报错
问题原因
- 直接使用
for row in data遍历pandas DataFrame时,默认迭代返回的是列名,而非每行的数据内容 - 代码中直接书写
header_0属于未定义的独立变量,Python不会自动将其关联到DataFrame的表头字段,需要主动从行数据中读取对应列的取值
修复方案
方案1:逐行遍历(适配原有逻辑)
使用iterrows()方法遍历每一行,通过行对象的列名索引获取对应字段值:
import pandas as pd import numpy as np def function(): # 加载数据 data = pd.read_csv('data.csv') # 遍历每一行,iterrows返回(行索引, 行数据Series) for idx, row in data.iterrows(): # 从当前行读取对应列的值构造矩阵 variable_matrix = np.array([[row['header_0'], row['header_1']], [row['header_2'], row['header_3']]]) weight_matrix = np.array([[0.01, 0.01], [0.01, 0.01]]) output = np.matmul(variable_matrix, weight_matrix) print(output)
注意事项
iterrows()返回的行数据是原DataFrame的视图,修改行数据不会同步到原DataFrame- 数据量超过1万行时,
iterrows()性能较差,推荐使用向量化方案
方案2:向量化运算(更高性能,无需循环)
直接提取整列数据批量做矩阵运算,效率是逐行遍历的百倍以上:
import pandas as pd import numpy as np def function(): data = pd.read_csv('data.csv') weight_matrix = np.array([[0.01, 0.01], [0.01, 0.01]]) # 批量提取所有行的对应列构造三维矩阵,维度为(行数, 2, 2) variable_matrices = data[['header_0', 'header_1', 'header_2', 'header_3']].values.reshape(-1, 2, 2) # 批量做矩阵乘法,输出维度为(行数, 2, 2) outputs = np.matmul(variable_matrices, weight_matrix) # 逐行打印结果,和原逻辑输出一致 for output in outputs: print(output)
内容的提问来源于stack exchange,提问作者BSH180_44
相关产品推荐
相关产品推荐

