如何将Pandas列嵌套数组转为适配Keras的NumPy数组?
问题原因与解决办法:把DataFrame数组列转成Keras能用的NumPy数组
为什么会出现嵌套的array()对象?
因为你的DataFrame列里每个元素都是独立的小NumPy数组,Pandas会把这些数组当成object类型的单个元素存储,而不是把整列识别成一个多维数组。用a['labels'].values取出来的是一个dtype为object的一维数组,每个元素就是你原来存的小数组,所以看起来像是嵌套了array()结构。
怎么转成符合要求的数组格式?
直接用numpy.stack()把这些小数组堆叠成一个二维数组就行,Keras就能直接用:
import numpy as np # 转换labels列,得到形状为(样本数, 1)的数组 labels_input = np.stack(a['labels'].values) # 转换text列,得到形状为(样本数, 300)的数组 text_input = np.stack(a['text'].values)
你也可以用列表推导式配合np.array(),效果一样:
labels_input = np.array([item for item in a['labels']])
转换完后可以验证下格式:
print(labels_input.shape) # 输出应该是 (你的样本数量, 1) print(text_input.shape) # 输出应该是 (你的样本数量, 300)
这样得到的数组就可以直接传入keras.fit(text_input, labels_input)了。
内容的提问来源于stack exchange,提问作者Richie Bendall
相关产品推荐
相关产品推荐

