我有一个大约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])
正如预期的那样,这打印出了#10;丢弃了10行NaN!&#34; ...虽然现在我想找出哪些行被丢弃所以我可以首先调查他们如何进入我的DataFrame。
我该怎么做?我已经尝试通过Pandas文档查找类似df.index.isna()
(没有骰子)的内容,并且我已尝试过&#34;之前&#34; &#34;&#34;&#34;&#34;数据框和计算它们的区别,但不确定如何做到这一点,我的尝试导致索引错误。
答案 0 :(得分:1)
您可以使用MultiIndex.to_frame
获取与您的索引等效的DataFrame
,然后合并isna
和any
以确定空行:
idxr = df.index.to_frame().isna().any(axis=1)
现在,您可以使用此功能过滤DataFrame
df[idxr]
,以限制MultiIndex
中空值的行。
注意:对于旧版本的pandas,您需要使用isnull
而不是isna
。