我有一个包含许多列和行的DataFrame(df
)。
我想要做的是访问一列中的值,其他两列中的值与我的索引器匹配。
这就是我现在的代码:
df.loc[df.delays == curr_d, df.prev_delay == prev_d, 'd_stim']
如果不清楚,我的目标是选择'd_stim'
列中的值,同一行中的其他值为curr_d
(在'delays'
中列)和prev_d
(在'prev_delay'
列中)。
使用loc
不起作用。它引发了以下错误:
/home/despo/dbliss/dopa_net/behavioral_experiments/analysis_code/behavior_analysis.py in plot_prev_curr_interaction(data_frames, labels)
2061 for k, prev_d in enumerate(delays):
2062 diff = np.array(df.loc[df.delays == curr_d,
-> 2063 df.prev_delay == prev_d, 'd_stim'])
2064 ind = ~np.isnan(diff)
2065 diff_rad = np.deg2rad(diff[ind])
/usr/local/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py in __getitem__(self, key)
1292
1293 if type(key) is tuple:
-> 1294 return self._getitem_tuple(key)
1295 else:
1296 return self._getitem_axis(key, axis=0)
/usr/local/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py in _getitem_tuple(self, tup)
787
788 # no multi-index, so validate all of the indexers
--> 789 self._has_valid_tuple(tup)
790
791 # ugly hack for GH #836
/usr/local/anaconda/lib/python2.7/site-packages/pandas/core/indexing.py in _has_valid_tuple(self, key)
139 for i, k in enumerate(key):
140 if i >= self.obj.ndim:
--> 141 raise IndexingError('Too many indexers')
142 if not self._has_valid_type(k, i):
143 raise ValueError("Location based indexing can only have [%s] "
IndexingError: Too many indexers
访问我需要的数据的适当方法是什么?
答案 0 :(得分:1)
你的逻辑不起作用有两个原因。
df.delays == curr_d,df.prev_delay == prev_d
and
,您需要将它们括在括号中并加入&
。这是@ MaxU在评论中的解决方案,除非你没有给我们所有东西,否则应该有效
df.loc[(df.delays == curr_d) & (df.prev_delay == prev_d), 'd_stim'])
但是,我认为这看起来更漂亮。
df.query('delays == @curr_d and prev_delay == @prev_d').d_stim
如果这样有效,那么应该是@ MaxU的。如果两者都不起作用,我建议你发布一些样本数据,因为大多数人不喜欢猜测你的数据是什么。