import pandas as pd
import numpy as np
df = pd.read_csv('~/test.txt')
list(df.columns.values)
我得到以下输出:
['time', 'Res_fs1', 'angle1', 'Res_fs2', 'angle2', 'Res_ps1', 'Force1',
'Res_ps2', 'Force2', 'object']
当我尝试使用Res_fs1,Res_fs2,Res_ps1,Res_ps2
创建一个numppy数组时X=np.array(df['Res_fs1','Res_fs2','Res_ps1','Res_ps2'])
虽然密钥存在,但我收到此错误消息说密钥错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1969, in
__getitem__
return self._getitem_column(key)
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 1976, in
_getitem_column
return self._get_item_cache(key)
File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 1091,
in _get_item_cache
values = self._data.get(item)
File "/usr/lib/python2.7/dist-packages/pandas/core/internals.py", line 3211,
in get
loc = self.items.get_loc(item)
File "/usr/lib/python2.7/dist-packages/pandas/core/index.py", line 1759, in
get_loc
return self._engine.get_loc(key)
File "pandas/index.pyx", line 137, in pandas.index.IndexEngine.get_loc
(pandas/index.c:3979)
File "pandas/index.pyx", line 157, in pandas.index.IndexEngine.get_loc
(pandas/index.c:3843)
File "pandas/hashtable.pyx", line 668, in
pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12265)
File "pandas/hashtable.pyx", line 676, in
pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12216)
KeyError: ('Res_fs1', 'Res_fs2', 'Res_ps1', 'Res_ps2')
答案 0 :(得分:2)
你可以这样做:
X = df[['Res_fs1','Res_fs2','Res_ps1','Res_ps2']].values
当您对列进行子集时,您需要使用双方括号&#39; [[&#39;和&#39;]]&#39;
答案 1 :(得分:1)
要真正了解正在发生的事情,您需要了解Python如何处理索引运算符(方括号)。在内部,方括号是调用对象的__getitem__
特殊方法的特殊语法。如果对象没有实现特殊方法,则会出现对象不支持索引的错误。
当您调用df['Res_fs1','Res_fs2','Res_ps1','Res_ps2']
时,Python会将逗号分隔列解释为元组。它将元组发送到DataFrame的__getitem__
特殊方法。
在内部,这就是所谓的。
df.__getitem__(('Res_fs1','Res_fs2','Res_ps1','Res_ps2'))
元组是不可变对象,能够进行哈希处理,因此是索引成员的候选对象。 pandas试图找到一个确切的元组('Res_fs1','Res_fs2','Res_ps1','Res_ps2')
的列名。由于您的DataFrame没有此列,因此会引发KeyError
。
当您致电df[['Res_fs1','Res_fs2','Res_ps1','Res_ps2']]
时,__getitem__
特殊方法会传递一个列表。列表无法进行哈希处理,因此无法成为索引的成员。因此,pandas采用完全不同的路径并检索传递列表中的所有列名。如果列表中的某个项目不是列名,则会引发KeyError
。
答案 2 :(得分:1)
pandas具有用于此目的的内置函数:pandas.DataFrame.as_matrix
DataFrame.as_matrix(列=无)
将帧转换为Numpy-array表示。