【问题标题】:Pandas - Error: Can only compare identically-labeled series objectsPandas - 错误:只能比较相同标签的系列对象
【发布时间】:2021-06-01 23:51:02
【问题描述】:

我无法弄清楚我之前运行过很多次的代码出错的原因。

为了给你一些内容,我正在使用如下所示的数据框:

User_ID Name Boss
1 Paul John
2 Laura Maria
3 Claire John

我需要创建一个新列 Boss_ID,它显示取自另一个数据帧的 Boss_ID。实际上,第二个数据帧如下所示:

ID Boss_ID
1 54
2 78
3 54

通常,我会运行以下代码:

df['Boss_ID'] = np.where(df['User_ID']==df_1['ID'],df_1['Boss_ID'],df[Boss_ID'])

我已经尝试了所有方法,重命名 User_ID 的列以使它们具有相同的名称,重置索引,检查每列是否属于相同的类型...

然而,我总是得到这样的信息:只能比较相同标签的系列对象

我最终使用了合并,但我想找到问题的根源。

提前致谢!

【问题讨论】:

  • 关注df['User_ID']==df_1['ID']。这两个系列的指数是多少?
  • 如果之前运行过,但现在没有运行,则行索引很可能在当前情况下不匹配。

标签: python pandas numpy


【解决方案1】:

产生错误的简单示例

In [72]: df=pd.DataFrame(data=[1,2,3],index=[4,6,8],columns=['ID'])
In [73]: df
Out[73]: 
   ID
4   1
6   2
8   3
In [74]: df1=pd.DataFrame(data=[1,2,3],index=[4,6,8],columns=['ID1'])

列名的不同并不重要:

In [75]: df1['ID1']==df['ID']
Out[75]: 
4    True
6    True
8    True
dtype: bool

索引不同:

In [76]: df2=pd.DataFrame(data=[1,2,3],index=[4,6,9],columns=['ID1'])
In [77]: df2['ID1']==df['ID']
Traceback (most recent call last):
  File "<ipython-input-77-d3d602ee9ac7>", line 1, in <module>
    df2['ID1']==df['ID']
  File "/usr/local/lib/python3.8/dist-packages/pandas/core/ops/common.py", line 65, in new_method
    return method(self, other)
  File "/usr/local/lib/python3.8/dist-packages/pandas/core/arraylike.py", line 29, in __eq__
    return self._cmp_method(other, operator.eq)
  File "/usr/local/lib/python3.8/dist-packages/pandas/core/series.py", line 4973, in _cmp_method
    raise ValueError("Can only compare identically-labeled Series objects")
ValueError: Can only compare identically-labeled Series objects

如果您注意回溯,您会发现这是一个pandas 错误,而不是numpy 错误!

从 Series 中提取数组会丢弃在 index 中,并且只允许按位置进行比较:

In [78]: df2['ID1'].to_numpy()==df['ID'].to_numpy()
Out[78]: array([ True,  True,  True])

【讨论】:

  • 非常感谢您的反馈!重置索引操作不应该解决问题,然后让我运行我想运行的代码吗?
  • 我不知道。您只显示了框架的表格显示。我无法从中重新创建或测试您的帧。
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
相关资源
最近更新 更多