给出以下一些索引为NaN
的pandas DataFrame,既然索引为NaN
,如何删除第三和第八行呢?谢谢
import pandas as pd
import numpy as np
data = list('abcdefghil')
indices = [0, 1, np.nan, 3, 4, 5, 6, np.nan, 8, 9]
df = pd.DataFrame(data, index=indices, columns=['data'])
答案 0 :(得分:5)
您可以在索引上呼叫dropna
:
In[68]:
df.loc[df.index.dropna()]
Out[68]:
data
0.0 a
1.0 b
3.0 d
4.0 e
5.0 f
6.0 g
8.0 i
9.0 l
请注意,NaN
的存在使索引dtype
float
(将其更改为int
)强制转换为类型:
In[70]:
df = df.loc[df.index.dropna()]
df.index = df.index.astype(int)
df
Out[70]:
data
0 a
1 b
3 d
4 e
5 f
6 g
8 i
9 l
您也可以在索引上调用notnull
也会起作用(以某种方式未记录)
In[71]:
df = df.loc[df.index.notnull()]
df.index = df.index.astype(int)
df
Out[71]:
data
0 a
1 b
3 d
4 e
5 f
6 g
8 i
9 l
还有isna
:
In[78]:
df.loc[~df.index.isna()]
Out[78]:
data
0.0 a
1.0 b
3.0 d
4.0 e
5.0 f
6.0 g
8.0 i
9.0 l
和更易读的反notna
:
In[79]:
df.loc[df.index.notna()]
Out[79]:
data
0.0 a
1.0 b
3.0 d
4.0 e
5.0 f
6.0 g
8.0 i
9.0 l
如@jpp所评论,您还可以使用顶级notnull
:
In[80]:
df.loc[pd.notnull(df.index)]
Out[80]:
data
0.0 a
1.0 b
3.0 d
4.0 e
5.0 f
6.0 g
8.0 i
9.0 l
也有顶级isna
,notna
和isnull
,但我将不显示它们,您可以检查docs
答案 1 :(得分:2)
您可以使用以下内容:
df = df[df.index.isnull() == False]
您可能要在之后重置索引
答案 2 :(得分:1)
使用np.isnan
并取负:
res = df[~np.isnan(df.index)]
print(res)
data
0.0 a
1.0 b
3.0 d
4.0 e
5.0 f
6.0 g
8.0 i
9.0 l