IndexingError:在dropna和过滤后提供的Unalignable boolean Series键

时间:2017-11-14 20:33:37

标签: pandas

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

如果我这样做:

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

1 个答案:

答案 0 :(得分: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

在第二种方法中,您要根据子集选择在oringal数据帧上执行下拉。因此,该方法有效,您可以使用该系列对数据帧进行布尔索引。