据to this post的时候,我应该能够访问在ndarray列的名称作为a.dtype.names如何保持列名从熊猫转换为numpy的
Howevever,如果我转换大熊猫数据帧到ndarray与df.as_matrix()或df.values,则dtype.names字段为None。另外,如果我尝试列名分配到ndarray
X = pd.DataFrame(dict(age=[40., 50., 60.], sys_blood_pressure=[140.,150.,160.]))
print X
print type(X.as_matrix())# <type 'numpy.ndarray'>
print type(X.as_matrix()[0]) # <type 'numpy.ndarray'>
m = X.as_matrix()
m.dtype.names = list(X.columns)
我得到
ValueError: there are no fields defined
UPDATE:
我在矩阵只需要持有的情况下,特别感兴趣单一类型(它是特定数字类型的ndarray),因为我也想使用cython进行优化。 (我怀疑numpy记录和结构化数组更难以处理,因为它们的输入更自由。)
真的,我只想维护通过科学计算的深层树的数组的column_name元数据,套件预测器。它的接口的.fit(X,y)和.predict(X)API不允许传递有关X和y对象之外的列标签的附加元数据。
'X.as_matrix()'可能产生一个统一的数组,全部为int或float。特别是如果所有列都具有相同的类型。链接中描述的'dtype.names'适用于结构化数组,其中一个使用复合'dtype'。熊猫是否有关于创建结构化数组的任何内容? – hpaulj
你打算如何处理这些列名?你的问题看起来像一个[“XY问题”](http://meta.stackexchange.com/a/66378)... – MaxU
你应该显示'X'(或至少一部分),以及'X. as_matrix()。shape'和'X.as_matrix()。dtype'。 – hpaulj