如何将pandas DataFrame的值提取后赋值给指定维度的多维numpy数组
报错原因
你将col1设置为DataFrame索引后,df1['col2'][x]的取值逻辑是匹配索引标签,而你的索引标签为["1", "2", "NaN", "NaN", "NaN", "NaN"],不存在数值为0的标签,因此触发KeyError。
最优实现方案
无需循环,直接提取列的numpy数组后调用reshape方法即可,代码如下:
import pandas as pd import numpy as np d = {'col1': [1, 2, 'NaN', 'NaN', 'NaN', 'NaN'], 'col2': [10, 20, 30, 40, 50 , 60]} df1 = pd.DataFrame(data=d) df1 = df1.set_index('col1') firstDimensionOfTheArray = 3 secondDimensionOfTheArray = 2 # 一行完成转换 array = df1['col2'].values.reshape(firstDimensionOfTheArray, secondDimensionOfTheArray)
执行后得到的数组为:
[[10 20] [30 40] [50 60]]
完全符合需求。
原循环写法修复
如果你需要保留原来的循环实现逻辑,只需将取值改为按位置索引的iloc即可:
for i in range (0, firstDimensionOfTheArray): for j in range (0, secondDimensionOfTheArray): array [i, j] = df1 ['col2'].iloc[i * secondDimensionOfTheArray + j]
内容的提问来源于stack exchange,提问作者PeterBe
相关产品推荐
相关产品推荐

