我有一个大约64,000行的Pandas DataFrame。看起来大致如下:
values
asn country
12345 US ...
12345 MX ...
我遇到一个错误,说MultiIndex不能包含非唯一值。这让我怀疑我的索引中有一些NaN
值。所以我尝试了以下验证:
df = # my data frame
rows = df.shape[0]
df = df.reindex(df.index.dropna())
if df.shape[0] < rows:
print "Dropped %s NaN rows!" % (rows - df.shape[0])
正如预期的那样,这打印出“Dropped 10 NaN rows!”......虽然现在我想找出哪些行被删除,所以我可以调查他们是如何进入我的DataFrame的。
我怎样才能做到这一点?我已经尝试通过Pandas文档查找像df.index.isna()
(没有骰子)的东西,我尝试采用“之前”和“之后”数据框架并计算它们的差异,但不知道如何做到这一点和我的尝试导致索引错误。
您可以使用MultiIndex.to_frame
获取与您的索引等效的DataFrame
,然后组合isna
和any
以确定空行:
idxr = df.index.to_frame().isna().any(axis=1)
您现在可以使用它来通过DataFrame
过滤df[idxr]
,以限制MultiIndex
中具有空值的行。
注意:对于旧版本的pandas,您需要使用isnull
而不是isna
。