删除multindex级别为nan(Pandas)的行

2024-07-01 06:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下表和multindex

                       value
userid     date

NaN        2014-06-12   42799
           2014-06-13   47673
           2014-06-14   47042
           2014-06-15   48079
           2014-06-16   44873
           2014-06-17   46586
           2014-06-18   44575
1000000021 2014-06-17   0
1000000024 2014-06-22   20
1000000043 2014-06-12   14
           2014-06-14   22
          .
          .
          .
          .

我想删除userid为Nan的行。如果我想再吵一架我可以

^{pr2}$

但是

data = data.drop('NaN')
data = data.drop(np.nan)

其他尝试都会返回不同种类的错误。有没有一种方法可以在不需要重新索引的情况下删除行?在


Tags: 方法datadatevalue错误np情况nan
2条回答

可以使用df.index.labels[0] == -1标识索引为NaN的行,并使用df.loc选择其他行:

In [48]: df.loc[~(df.index.labels[0] == -1)]
Out[48]: 
                       value
userid     date             
1000000021 2014-06-17      0
1000000024 2014-06-22     20
1000000043 2014-06-12     14
           2014-06-14     22

使用布尔索引时,df[...]df.loc[...],和{}的行为相同。df[...]通常用于选择列,因此您可能希望避免使用df[...]同时选择行,如上所述。这使得df.loc和{}成为可行的选择。由于df.iloc主要是为了通过整数索引进行选择而创建的,所以您可能需要使用df.loc[...]按标签按布尔掩码进行选择。但这只是我的惯例,熊猫允许三者兼而有之。在

更容易重置并从帧中删除,然后设置索引。在

In [3]: df =  DataFrame(np.random.randint(0,10,size=16).reshape(-1,1),columns=['value'],index=pd.MultiIndex.from_product([[np.nan,1,2,3],pd.date_range('20130101',periods=4)],names=['first','second']))

In [4]: df
Out[4]: 
                  value
first second           
NaN   2013-01-01      0
      2013-01-02      2
      2013-01-03      9
      2013-01-04      3
1     2013-01-01      8
      2013-01-02      8
      2013-01-03      5
      2013-01-04      3
2     2013-01-01      4
      2013-01-02      1
      2013-01-03      2
      2013-01-04      7
3     2013-01-01      3
      2013-01-02      9
      2013-01-03      3
      2013-01-04      4

In [5]: df.reset_index().dropna(subset=['first']).set_index(['first','second'])
Out[5]: 
                  value
first second           
1     2013-01-01      8
      2013-01-02      8
      2013-01-03      5
      2013-01-04      3
2     2013-01-01      4
      2013-01-02      1
      2013-01-03      2
      2013-01-04      7
3     2013-01-01      3
      2013-01-02      9
      2013-01-03      3
      2013-01-04      4

相关问题 更多 >

    热门问题