【问题标题】:Python Pandas can only compare identically-labelled series objectsPython Pandas 只能比较相同标签的系列对象
【发布时间】:2020-08-29 17:15:40
【问题描述】:

我有三个数据框。这是我的代码,我收到值错误。
raise ValueError("Can only compare identically-labeled Series objects")

ValueError: 只能比较标签相同的 Series 对象。

这是我的代码:

df1
df2
df3
for i in df1:                 # for i from df1
     x = df2.loc[df2['col_1'] == i, 'col_2']   #looking for i in col_1 of df2 and getting coresponding value of col_2 as x.
     y = df3.loc[df3['col_1'] == x, 'col_2']   #looking for x in col_1 of df3 and getting coresponding value of col_2 as y

for 循环中的第一条语句运行正确,但在第二条语句中出现值错误。

【问题讨论】:

  • 当你运行for i in df1 时,i 只取df1 的列名。我不认为那是你想要的。你在迭代df1的行吗?
  • df1 只有一列。当我评论“for”循环的第二行时,它运行良好。
  • 因此您可能在x 中有多个匹配项,而x 不是单个值。你可以试试这个x = df2.loc[df2['col_1'] == i, 'col_2'].iloc[0]。
  • 你试过merge吗?
  • x 中没有多个匹配项...及以上也不起作用。

标签: python pandas


【解决方案1】:

假设你的 3 个 DataFrame 有以下内容:

df1:                df2:              df3:
       Aa    Bb       col_1 col_2       col_1 col_2
0  123.15  12.6     0    Aa    Cc     0    Cc    Gg
1  137.53  28.3     1    Bb    Dd     1    Dd    Hh
                    2    Bb    Ee     2    Ee    Jj
                                      3    Ff    Kk

在循环的第一轮 i 包含第一列的名称 在 df1 中,即 'Aa'.

当你执行x = df2.loc[df2['col_1'] == i, 'col_2']时,结果是 系列:

0    Cc
Name: col_2, dtype: object

现在,即使您尝试执行df3['col_1'] == x,也会发生错误。

请注意,在这种情况下,df3['col_1'] 和 x 都是 Series 类型。 在这种情况下:

  • Pandas 所做的第一件事是对齐两个系列(在索引上),
  • 然后它会比较每对(对齐的)元素。

但在这种情况下:

  • df3['col_1'] 包含索引 0 到 3,
  • x 中的索引仅包含 一个 位置 - 0。

所以有对齐失败,导致这个异常。

为了解决这个问题,将违规行更改为:

y = df3.loc[df3['col_1'].isin(x), 'col_2']

现在 Pandas 会按照您的预期运行:

  • 迭代df3['col_1'],
  • 为当前元素检查它的值是否在值之间 出现在 x,
  • 如果是,则将当前行中 col_2 中的值添加到 结果。

为了演示这段代码是如何工作的,用一些打印输出完成它:

for i in df1:
    print(f'\ni: {i}')
    x = df2.loc[df2['col_1'] == i, 'col_2']
    print(f'\nx:\n{x}')
    y = df3.loc[df3['col_1'].isin(x), 'col_2']
    print(f'\ny:\n{y}')

当你运行上面的代码,在我的数据上,结果是:

i: Aa

x:
0    Cc
Name: col_2, dtype: object

y:
0    Gg
Name: col_2, dtype: object

i: Bb

x:
1    Dd
2    Ee
Name: col_2, dtype: object

y:
1    Hh
2    Jj
Name: col_2, dtype: object

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2020-09-17
    • 2018-12-06
    相关资源
    最近更新 更多