【问题标题】:Unalignable boolean Series provided as indexer作为索引器提供的不可对齐的布尔系列
【发布时间】:2021-04-20 04:32:46
【问题描述】:

我正在尝试将数据框过滤为:

a= a[~(b['var1'].isin(c['var2']))]

但得到以下错误:

"Unalignable boolean Series provided as "
pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).

我理解以下声明:

print(~(b['var1'].isin(c['var2'])) [:10])

正在返回一个可能不可接受的布尔掩码系列。所以,我尝试使用 loc 作为:

a= a.loc[:, ~(b['var1'].isin(c['var2']))]

但我遇到了同样的错误。我在这里想念什么?任何意见将不胜感激。

谢谢

【问题讨论】:

  • a,b,c 是 3 个不同的 DataFrame?
  • 是的,它们是三个不同的数据框

标签: python pandas filtering


【解决方案1】:

错误表示aisin创建的掩码的索引不同,这意味着b的索引不同。

mask = ~(b['var1'].isin(c['var2']))

因此可能的解决方案是通过a.index 更改索引,对于不匹配的值添加Falses:

a[mask.reindex(a.index, fill_value=False)]

或者:

a[~(b['var1'].reindex(a.index, fill_value=False).isin(c['var2']))]

【讨论】:

  • 工作得很好。而且是有道理的。我想知道将这段代码更直观地(在传统的数据处理意义上)编写为某种连接/合并可能会更好吗?
  • @flying_fluid_four - 是的,另一个想法是从a, bdf = a.join(b['var1']) 一样创建新的数据帧,然后过滤a[~(df['var1'].isin(c['var2']))]
  • @flying_fluid_four - 但不必在c['var2'] 中丢失值,因为不同的b['var1']df['var1'] 缺少不匹配索引的值。
猜你喜欢
  • 2018-01-03
  • 2020-12-15
  • 2020-08-05
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2020-01-03
  • 1970-01-01
相关资源
最近更新 更多