【问题标题】:IndexingError: Unalignable boolean Series key provided after dropna and filteringIndexingError:在 dropna 和过滤后提供的不可对齐的布尔系列键
【发布时间】:2018-04-27 22:16:03
【问题描述】:

我想删除某一列的空白行,然后对该列进行过滤:

如果我这样做:

df['location'].dropna(inplace=True)
dfloc = df[df['location'] == myvar]

然后我得到这个错误:

IndexingError: Unalignable boolean Series key provided

所以我必须像这样使用 dropna 来避免错误:

df.dropna(subset = ['location'],inplace=True)
dfloc = df[df['location'] == myvar]

有谁知道为什么第一种方法会产生错误,而第二种方法不会?

这是我的 DataFrame 的示例:

      uid                date          location
1  1114-104119      2017-11-14 10:41:19     Chicago
2  1114-104056      2017-11-14 10:40:56     NaN
3  1114-104055      2017-11-14 10:40:55     LA
4  1114-103223      2017-11-14 10:32:23     NaN
5  1114-103050      2017-11-14 10:30:50     NYC

【问题讨论】:

  • 你有一些数据要测试吗?
  • 对不起,我不能分享。
  • 如果有人愿意解释否决票,我将不胜感激。我似乎错误地认为这是一个有趣的问题,它可能会在未来帮助其他人,并希望得到一些反馈以成为社区中更好的成员:)
  • 您应该创建一些虚拟数据来配合这个问题来模拟这个问题,就像我在下面建议的答案中所做的那样。阅读this post,了解如何创建一个好的 Pandas 问题
  • 感谢您的反馈和解释。

标签: pandas


【解决方案1】:

第一种方法,发生的事情是您正在创建原始数据帧的副本或切片并从该系列中删除行,您并没有真正影响原始数据帧。现在,当您尝试使用该损坏的系列对原始数据帧进行切片时,该系列的索引与原始数据帧的索引不匹配。因此,错误

IndexingError:提供了不可对齐的布尔系列键

这是证据。

df = pd.DataFrame({'Location':[1,np.nan,3,np.nan],'A':np.random.randint(0,10,4)})
df
   A  Location
0  7       1.0
1  6       NaN
2  1       3.0
3  8       NaN

df['Location'].dropna(inplace=True)
print(df['Location'])
0    1.0
2    3.0
Name: Location, dtype: float64

但是,如果您再次打印 df,您将获得完整的数据帧,您并没有修改此数据帧。

print(df)

   A  Location
0  7       1.0
1  6       NaN
2  1       3.0
3  8       NaN

在第二种方法中,您将根据子集选择对原始数据帧进行删除。因此,该方法有效,您可以使用该系列对数据框进行布尔索引。

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2017-09-13
    • 2022-12-14
    • 2021-04-20
    • 2018-01-03
    相关资源
    最近更新 更多