我在Jupyter notebook内部工作,我的理解是,在最后一行中,通过调用df_speed_full['cam_id'] == rand_cam_id
,我将索引标记为True
和False
,然后将它们传递给外部df_speed_full
,以便只选择那些具有True
的索引。然而,不知何故,我得到了这个。如果能解释一下我在这里遗漏了什么,我将不胜感激。我试着读了其他答案,但什么都没有点击。
rand_row = df_speed_full.sample(random_state=42)
rand_cam_id = list(rand_row['cam_id'])
rand_cam_df = df_speed_full[df_speed_full['cam_id'] == rand_cam_id]
这就是我得到的:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
C:\Users\HENRYK~1\AppData\Local\Temp/ipykernel_18136/4206593172.py in <module>
----> 1 rand_cam_df = df_speed_full[df_speed_full['cam_id'] == rand_cam_id]
~\anaconda3\lib\site-packages\pandas\core\ops\common.py in new_method(self, other)
67 other = item_from_zerodim(other)
68
---> 69 return method(self, other)
70
71 return new_method
~\anaconda3\lib\site-packages\pandas\core\arraylike.py in __eq__(self, other)
30 @unpack_zerodim_and_defer("__eq__")
31 def __eq__(self, other):
---> 32 return self._cmp_method(other, operator.eq)
33
34 @unpack_zerodim_and_defer("__ne__")
~\anaconda3\lib\site-packages\pandas\core\series.py in _cmp_method(self, other, op)
5500
5501 with np.errstate(all="ignore"):
-> 5502 res_values = ops.comparison_op(lvalues, rvalues, op)
5503
5504 return self._construct_result(res_values, name=res_name)
~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op)
259 # The ambiguous case is object-dtype. See GH#27803
260 if len(lvalues) != len(rvalues):
--> 261 raise ValueError(
262 "Lengths must match to compare", lvalues.shape, rvalues.shape
263 )
ValueError: ('Lengths must match to compare', (229025,), (1,))
发布于 2021-10-26 10:46:41
抱怨来自您的==
操作(通过特殊方法__eq__
位于错误回溯中这一事实可以看出)。
在比较DataFrame或系列对象(如A == B
)时,会发生以下情况:
A
是一个数据帧/系列,B
是一个标量,你会得到一个True
/False
的数据帧/系列,说明如果每个元素等于,A
是一个数据帧/系列,B
是一个数据帧/系列,那么A
的每个元素将与<代码>d15False>的每个相应元素进行比较。只有当A
和B
具有相同的形状时,这才有效。你将进入第二种选择。但是您正在将一个包含229025个元素的系列与一个原本应该包含229025个元素但实际上只有1个元素的列表进行比较,这是因为您匹配的是一个只有一个元素的list
。
您可能希望将第二行替换为rand_cam_id = list(rand_row['cam_id'])[0]
。这将使rand_cam_id
不再是一个列表,而是您期望在列表中找到的单个元素。这样,==
操作将通过第一个选项,并为您提供您期望的元素匹配。
https://stackoverflow.com/questions/69728226
复制相似问题