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')
要真正理解正在发生的事情,您需要了解Python如何处理索引操作符(方括号)。在内部,方括号是用于调用对象的\uuu getitem\uu
特殊方法的特殊语法。如果对象未实现特殊方法,则会出现一个错误,说明对象不支持索引。
调用df['Res_fs1'、'Res_fs2'、'Res_ps1'、'Res_ps2']
时,Python将逗号分隔的列解释为元组。它将元组发送到数据帧的\uuu getitem\uuu
特殊方法。
在内部,这就是所谓的。
df.__getitem__(('Res_fs1','Res_fs2','Res_ps1','Res_ps2'))
元组是不可变的对象,可以散列,因此是索引成员的候选对象。pandas试图找到一个与元组完全相同的列名('Res_fs1'、'Res_fs2'、'Res_ps1'、'Res_ps2')
。由于您的数据帧没有此列,因此会引发一个KeyError
。
调用df[['Res_fs1'、'Res_fs2'、'Res_ps1'、'Res_ps2']]
时,会向\uuu getitem\uuu
特殊方法传递一个列表。列表不能进行散列,因此不能成为索引的成员。因此,pandas采用完全不同的路径并检索传递列表中的所有列名。如果列表中的某个项目不是列名,它将引发一个KeyError
。
你可以只做:
X = df[['Res_fs1','Res_fs2','Res_ps1','Res_ps2']].values
当您子集列时,您需要使用双方括号“[[”和“]]”
问题内容: 我终于从包含许多json对象的文件中获得了我需要的数据输出,但是当它在数据中循环时,我需要一些帮助将以下输出转换为单个数据帧。这是产生输出的代码,包括输出外观的示例: 原始数据: 运行上面的命令时,我将获得示例输出,我希望将其存储为3列的pandas数据框中。 因此,以下代码似乎更接近,因为如果我在列表中传递并转置df,它会给我一个时髦的df。关于如何正确调整此形状的任何想法吗? 数据
我正在尝试制作一个数据帧,以便可以轻松地将其发送到CSV,否则我必须手动执行此过程。。 我希望这是我的最终输出。每个人都有一个月和年的组合,从2014年1月1日开始,一直到2016年1月12日: 到目前为止的代码: 当我尝试循环创建数据帧时,它要么不工作,要么出现索引错误(因为不匹配列表),我不知所措。 我已经做了一点很好的搜索,并找到了以下一些类似的链接,但我不能反向工程的工作,以适应我的情况。
拿着字典: 我如何把这个字典变成一个数据框,其中的值是列?即。我想要一个数据框显示: 这种形式似乎根本得不到! 谢谢 这是一个不同的问题,另一个问题只是问如何将字典的值放入数据帧,我问的是如何获得我概述的特定形式
问题内容: 我注意到程序中存在一个错误,发生该错误的原因是因为熊猫似乎是通过引用熊猫数据框而不是通过值进行复制。我知道不可变对象将始终通过引用传递,但pandas数据帧不是不可变的,因此我不明白为什么它通过引用传递。谁能提供一些信息? 谢谢!安德鲁 问题答案: Python中的所有函数都是“按引用传递”,没有“按值传递”。如果要显式复制pandas对象,请尝试。
我有一本字典的形式: 例如, 我想转换成熊猫数据帧与列1的用户名和其他列的电影评级,即: 但是,一些用户没有对电影进行评分,因此这些电影不包括在该用户键()的值()中。在这种情况下,只需用NaN填充条目就好了。 现在,我迭代键,填充列表,然后使用此列表创建数据帧: 但这只给了我一个用户的数据框,这些用户对片场中的所有电影都进行了评分。 我的目标是通过迭代电影标签(而不是上面显示的暴力方法)来追加到
如何将pandas数据帧(21 x 31)转换为numpy数组? 例如: 数组_1(n_1,n_2,n_3,…,n31) 数组_2(n_1,n_2,n_3,…,n31) 数组21(n_1,n_2,n_3,…,n31) 我尝试了以下代码段: .. 并得到如下结果: 问题是第二个方括号太多了。我该如何解决这个问题?